From c00a3d2b761870bc04eaa73c31b5b431f79250de Mon Sep 17 00:00:00 2001 From: Jordan Hagan Date: Mon, 8 Jan 2024 12:49:20 +1100 Subject: [PATCH 1/2] wip commit before removing submodules --- .gitignore | 4 +- .../137/run-1659050856.json | 24 - .../137/run-1659050979.json | 24 - .../137/run-1659051329.json | 24 - .../137/run-1659051658.json | 26 - .../137/run-1659051665.json | 193 - .../137/run-1659051668.json | 193 - .../137/run-1659052009.json | 193 - .../PreProxyDeploy.s.sol/137/run-latest.json | 193 - contracts/FastLaneFactory.sol | 75 - .../helpers/SearcherHelperRepayerEcho.sol | 23 - contracts/interfaces/IFastLaneAuction.sol | 140 - .../FastLaneAuction.sol.inheritance-graph.dot | 24 - contracts/legacy/FastLaneLegacyAuction.sol | 964 --- .../FastLaneLegacyAuctionAbi.legacy.json | 1357 ---- lcov.info | 1057 --- package.json | 9 +- report/amber.png | Bin 141 -> 0 bytes .../FastLaneAuction.sol.func-sort-c.html | 253 - .../contracts/FastLaneAuction.sol.func.html | 253 - .../contracts/FastLaneAuction.sol.gcov.html | 1049 --- .../FastLaneFactory.sol.func-sort-c.html | 93 - .../contracts/FastLaneFactory.sol.func.html | 93 - .../contracts/FastLaneFactory.sol.gcov.html | 160 - ...astLaneAuctionHandler.sol.func-sort-c.html | 185 - .../FastLaneAuctionHandler.sol.func.html | 185 - .../FastLaneAuctionHandler.sol.gcov.html | 817 -- .../auction-handler/index-sort-b.html | 107 - .../auction-handler/index-sort-f.html | 107 - .../auction-handler/index-sort-l.html | 107 - report/contracts/auction-handler/index.html | 107 - ...cherHelperRepayerEcho.sol.func-sort-c.html | 85 - .../SearcherHelperRepayerEcho.sol.func.html | 85 - .../SearcherHelperRepayerEcho.sol.gcov.html | 108 - report/contracts/helpers/index-sort-b.html | 107 - report/contracts/helpers/index-sort-f.html | 107 - report/contracts/helpers/index-sort-l.html | 107 - report/contracts/helpers/index.html | 107 - report/contracts/index-sort-b.html | 107 - report/contracts/index-sort-f.html | 107 - report/contracts/index-sort-l.html | 107 - report/contracts/index.html | 107 - .../FastLaneRelay.sol.func-sort-c.html | 201 - .../jit-relay/FastLaneRelay.sol.func.html | 201 - .../jit-relay/FastLaneRelay.sol.gcov.html | 603 -- report/contracts/jit-relay/index-sort-b.html | 107 - report/contracts/jit-relay/index-sort-f.html | 107 - report/contracts/jit-relay/index-sort-l.html | 107 - report/contracts/jit-relay/index.html | 107 - ...stLaneSearcherWrapper.sol.func-sort-c.html | 121 - .../FastLaneSearcherWrapper.sol.func.html | 121 - .../FastLaneSearcherWrapper.sol.gcov.html | 225 - ...ontractContextOwnable.sol.func-sort-c.html | 97 - ...archerContractContextOwnable.sol.func.html | 97 - ...archerContractContextOwnable.sol.gcov.html | 142 - ...alSearcherRawContract.sol.func-sort-c.html | 101 - .../MinimalSearcherRawContract.sol.func.html | 101 - .../MinimalSearcherRawContract.sol.gcov.html | 163 - .../contracts/jit-searcher/index-sort-b.html | 107 - .../contracts/jit-searcher/index-sort-f.html | 107 - .../contracts/jit-searcher/index-sort-l.html | 107 - report/contracts/jit-searcher/index.html | 107 - ...FastLaneLegacyAuction.sol.func-sort-c.html | 253 - .../FastLaneLegacyAuction.sol.func.html | 253 - .../FastLaneLegacyAuction.sol.gcov.html | 1049 --- report/contracts/legacy/index-sort-b.html | 107 - report/contracts/legacy/index-sort-f.html | 107 - report/contracts/legacy/index-sort-l.html | 107 - report/contracts/legacy/index.html | 107 - ...astLaneSearcherDirect.sol.func-sort-c.html | 121 - .../FastLaneSearcherDirect.sol.func.html | 121 - .../FastLaneSearcherDirect.sol.gcov.html | 226 - .../searcher-direct/index-sort-b.html | 107 - .../searcher-direct/index-sort-f.html | 107 - .../searcher-direct/index-sort-l.html | 107 - report/contracts/searcher-direct/index.html | 107 - ...FastLaneSearcherProxy.sol.func-sort-c.html | 117 - .../FastLaneSearcherProxy.sol.func.html | 117 - .../FastLaneSearcherProxy.sol.gcov.html | 201 - .../searcher-proxy/index-sort-b.html | 107 - .../searcher-proxy/index-sort-f.html | 107 - .../searcher-proxy/index-sort-l.html | 107 - report/contracts/searcher-proxy/index.html | 107 - report/emerald.png | Bin 141 -> 0 bytes report/gcov.css | 519 -- report/glass.png | Bin 167 -> 0 bytes report/index-sort-b.html | 227 - report/index-sort-f.html | 227 - report/index-sort-l.html | 227 - report/index.html | 227 - report/ruby.png | Bin 141 -> 0 bytes .../script/EOADeploy.s.sol.func-sort-c.html | 89 - report/script/EOADeploy.s.sol.func.html | 89 - report/script/EOADeploy.s.sol.gcov.html | 137 - .../PreProxyDeploy.s.sol.func-sort-c.html | 85 - report/script/PreProxyDeploy.s.sol.func.html | 85 - report/script/PreProxyDeploy.s.sol.gcov.html | 108 - .../script/UUPSDeploy.s.sol.func-sort-c.html | 89 - report/script/UUPSDeploy.s.sol.func.html | 89 - report/script/UUPSDeploy.s.sol.gcov.html | 201 - report/script/index-sort-b.html | 107 - report/script/index-sort-f.html | 107 - report/script/index-sort-l.html | 107 - report/script/index.html | 107 - .../EOADeploy.s.sol.func-sort-c.html | 89 - .../legacy-script/EOADeploy.s.sol.func.html | 89 - .../legacy-script/EOADeploy.s.sol.gcov.html | 139 - .../UUPSDeploy.s.sol.func-sort-c.html | 89 - .../legacy-script/UUPSDeploy.s.sol.func.html | 89 - .../legacy-script/UUPSDeploy.s.sol.gcov.html | 201 - report/script/legacy-script/index-sort-b.html | 119 - report/script/legacy-script/index-sort-f.html | 119 - report/script/legacy-script/index-sort-l.html | 119 - report/script/legacy-script/index.html | 119 - report/snow.png | Bin 141 -> 0 bytes report/test/PFLAuction.t.sol.func-sort-c.html | 93 - report/test/PFLAuction.t.sol.func.html | 93 - report/test/PFLAuction.t.sol.gcov.html | 1341 ---- .../PFL_AuctionHandler.t.sol.func-sort-c.html | 113 - .../test/PFL_AuctionHandler.t.sol.func.html | 113 - .../test/PFL_AuctionHandler.t.sol.gcov.html | 1020 --- report/test/PFL_Relay.t.sol.func-sort-c.html | 109 - report/test/PFL_Relay.t.sol.func.html | 109 - report/test/PFL_Relay.t.sol.gcov.html | 460 -- report/test/index-sort-b.html | 107 - report/test/index-sort-f.html | 107 - report/test/index-sort-l.html | 107 - report/test/index.html | 107 - .../PFLAuction.t.sol.func-sort-c.html | 93 - .../legacy-test/PFLAuction.t.sol.func.html | 93 - .../legacy-test/PFLAuction.t.sol.gcov.html | 1342 ---- report/test/legacy-test/index-sort-b.html | 107 - report/test/legacy-test/index-sort-f.html | 107 - report/test/legacy-test/index-sort-l.html | 107 - report/test/legacy-test/index.html | 107 - .../MockPaymentProcessor.sol.func-sort-c.html | 85 - .../mocks/MockPaymentProcessor.sol.func.html | 85 - .../mocks/MockPaymentProcessor.sol.gcov.html | 114 - report/test/mocks/index-sort-b.html | 107 - report/test/mocks/index-sort-f.html | 107 - report/test/mocks/index-sort-l.html | 107 - report/test/mocks/index.html | 107 - report/updown.png | Bin 117 -> 0 bytes test/legacy-test/PFLAuction.t.sol | 1257 --- test/legacy-test/PFLDeploy.t.sol | 145 - yarn-error.log | 7086 ----------------- 146 files changed, 4 insertions(+), 34974 deletions(-) delete mode 100644 broadcast/PreProxyDeploy.s.sol/137/run-1659050856.json delete mode 100644 broadcast/PreProxyDeploy.s.sol/137/run-1659050979.json delete mode 100644 broadcast/PreProxyDeploy.s.sol/137/run-1659051329.json delete mode 100644 broadcast/PreProxyDeploy.s.sol/137/run-1659051658.json delete mode 100644 broadcast/PreProxyDeploy.s.sol/137/run-1659051665.json delete mode 100644 broadcast/PreProxyDeploy.s.sol/137/run-1659051668.json delete mode 100644 broadcast/PreProxyDeploy.s.sol/137/run-1659052009.json delete mode 100644 broadcast/PreProxyDeploy.s.sol/137/run-latest.json delete mode 100644 contracts/FastLaneFactory.sol delete mode 100644 contracts/helpers/SearcherHelperRepayerEcho.sol delete mode 100644 contracts/interfaces/IFastLaneAuction.sol delete mode 100644 contracts/legacy/FastLaneAuction.sol.inheritance-graph.dot delete mode 100644 contracts/legacy/FastLaneLegacyAuction.sol delete mode 100644 contracts/legacy/legacy-abi/FastLaneLegacyAuctionAbi.legacy.json delete mode 100644 lcov.info delete mode 100644 report/amber.png delete mode 100644 report/contracts/FastLaneAuction.sol.func-sort-c.html delete mode 100644 report/contracts/FastLaneAuction.sol.func.html delete mode 100644 report/contracts/FastLaneAuction.sol.gcov.html delete mode 100644 report/contracts/FastLaneFactory.sol.func-sort-c.html delete mode 100644 report/contracts/FastLaneFactory.sol.func.html delete mode 100644 report/contracts/FastLaneFactory.sol.gcov.html delete mode 100644 report/contracts/auction-handler/FastLaneAuctionHandler.sol.func-sort-c.html delete mode 100644 report/contracts/auction-handler/FastLaneAuctionHandler.sol.func.html delete mode 100644 report/contracts/auction-handler/FastLaneAuctionHandler.sol.gcov.html delete mode 100644 report/contracts/auction-handler/index-sort-b.html delete mode 100644 report/contracts/auction-handler/index-sort-f.html delete mode 100644 report/contracts/auction-handler/index-sort-l.html delete mode 100644 report/contracts/auction-handler/index.html delete mode 100644 report/contracts/helpers/SearcherHelperRepayerEcho.sol.func-sort-c.html delete mode 100644 report/contracts/helpers/SearcherHelperRepayerEcho.sol.func.html delete mode 100644 report/contracts/helpers/SearcherHelperRepayerEcho.sol.gcov.html delete mode 100644 report/contracts/helpers/index-sort-b.html delete mode 100644 report/contracts/helpers/index-sort-f.html delete mode 100644 report/contracts/helpers/index-sort-l.html delete mode 100644 report/contracts/helpers/index.html delete mode 100644 report/contracts/index-sort-b.html delete mode 100644 report/contracts/index-sort-f.html delete mode 100644 report/contracts/index-sort-l.html delete mode 100644 report/contracts/index.html delete mode 100644 report/contracts/jit-relay/FastLaneRelay.sol.func-sort-c.html delete mode 100644 report/contracts/jit-relay/FastLaneRelay.sol.func.html delete mode 100644 report/contracts/jit-relay/FastLaneRelay.sol.gcov.html delete mode 100644 report/contracts/jit-relay/index-sort-b.html delete mode 100644 report/contracts/jit-relay/index-sort-f.html delete mode 100644 report/contracts/jit-relay/index-sort-l.html delete mode 100644 report/contracts/jit-relay/index.html delete mode 100644 report/contracts/jit-searcher/FastLaneSearcherWrapper.sol.func-sort-c.html delete mode 100644 report/contracts/jit-searcher/FastLaneSearcherWrapper.sol.func.html delete mode 100644 report/contracts/jit-searcher/FastLaneSearcherWrapper.sol.gcov.html delete mode 100644 report/contracts/jit-searcher/MinimalSearcherContractContextOwnable.sol.func-sort-c.html delete mode 100644 report/contracts/jit-searcher/MinimalSearcherContractContextOwnable.sol.func.html delete mode 100644 report/contracts/jit-searcher/MinimalSearcherContractContextOwnable.sol.gcov.html delete mode 100644 report/contracts/jit-searcher/MinimalSearcherRawContract.sol.func-sort-c.html delete mode 100644 report/contracts/jit-searcher/MinimalSearcherRawContract.sol.func.html delete mode 100644 report/contracts/jit-searcher/MinimalSearcherRawContract.sol.gcov.html delete mode 100644 report/contracts/jit-searcher/index-sort-b.html delete mode 100644 report/contracts/jit-searcher/index-sort-f.html delete mode 100644 report/contracts/jit-searcher/index-sort-l.html delete mode 100644 report/contracts/jit-searcher/index.html delete mode 100644 report/contracts/legacy/FastLaneLegacyAuction.sol.func-sort-c.html delete mode 100644 report/contracts/legacy/FastLaneLegacyAuction.sol.func.html delete mode 100644 report/contracts/legacy/FastLaneLegacyAuction.sol.gcov.html delete mode 100644 report/contracts/legacy/index-sort-b.html delete mode 100644 report/contracts/legacy/index-sort-f.html delete mode 100644 report/contracts/legacy/index-sort-l.html delete mode 100644 report/contracts/legacy/index.html delete mode 100644 report/contracts/searcher-direct/FastLaneSearcherDirect.sol.func-sort-c.html delete mode 100644 report/contracts/searcher-direct/FastLaneSearcherDirect.sol.func.html delete mode 100644 report/contracts/searcher-direct/FastLaneSearcherDirect.sol.gcov.html delete mode 100644 report/contracts/searcher-direct/index-sort-b.html delete mode 100644 report/contracts/searcher-direct/index-sort-f.html delete mode 100644 report/contracts/searcher-direct/index-sort-l.html delete mode 100644 report/contracts/searcher-direct/index.html delete mode 100644 report/contracts/searcher-proxy/FastLaneSearcherProxy.sol.func-sort-c.html delete mode 100644 report/contracts/searcher-proxy/FastLaneSearcherProxy.sol.func.html delete mode 100644 report/contracts/searcher-proxy/FastLaneSearcherProxy.sol.gcov.html delete mode 100644 report/contracts/searcher-proxy/index-sort-b.html delete mode 100644 report/contracts/searcher-proxy/index-sort-f.html delete mode 100644 report/contracts/searcher-proxy/index-sort-l.html delete mode 100644 report/contracts/searcher-proxy/index.html delete mode 100644 report/emerald.png delete mode 100644 report/gcov.css delete mode 100644 report/glass.png delete mode 100644 report/index-sort-b.html delete mode 100644 report/index-sort-f.html delete mode 100644 report/index-sort-l.html delete mode 100644 report/index.html delete mode 100644 report/ruby.png delete mode 100644 report/script/EOADeploy.s.sol.func-sort-c.html delete mode 100644 report/script/EOADeploy.s.sol.func.html delete mode 100644 report/script/EOADeploy.s.sol.gcov.html delete mode 100644 report/script/PreProxyDeploy.s.sol.func-sort-c.html delete mode 100644 report/script/PreProxyDeploy.s.sol.func.html delete mode 100644 report/script/PreProxyDeploy.s.sol.gcov.html delete mode 100644 report/script/UUPSDeploy.s.sol.func-sort-c.html delete mode 100644 report/script/UUPSDeploy.s.sol.func.html delete mode 100644 report/script/UUPSDeploy.s.sol.gcov.html delete mode 100644 report/script/index-sort-b.html delete mode 100644 report/script/index-sort-f.html delete mode 100644 report/script/index-sort-l.html delete mode 100644 report/script/index.html delete mode 100644 report/script/legacy-script/EOADeploy.s.sol.func-sort-c.html delete mode 100644 report/script/legacy-script/EOADeploy.s.sol.func.html delete mode 100644 report/script/legacy-script/EOADeploy.s.sol.gcov.html delete mode 100644 report/script/legacy-script/UUPSDeploy.s.sol.func-sort-c.html delete mode 100644 report/script/legacy-script/UUPSDeploy.s.sol.func.html delete mode 100644 report/script/legacy-script/UUPSDeploy.s.sol.gcov.html delete mode 100644 report/script/legacy-script/index-sort-b.html delete mode 100644 report/script/legacy-script/index-sort-f.html delete mode 100644 report/script/legacy-script/index-sort-l.html delete mode 100644 report/script/legacy-script/index.html delete mode 100644 report/snow.png delete mode 100644 report/test/PFLAuction.t.sol.func-sort-c.html delete mode 100644 report/test/PFLAuction.t.sol.func.html delete mode 100644 report/test/PFLAuction.t.sol.gcov.html delete mode 100644 report/test/PFL_AuctionHandler.t.sol.func-sort-c.html delete mode 100644 report/test/PFL_AuctionHandler.t.sol.func.html delete mode 100644 report/test/PFL_AuctionHandler.t.sol.gcov.html delete mode 100644 report/test/PFL_Relay.t.sol.func-sort-c.html delete mode 100644 report/test/PFL_Relay.t.sol.func.html delete mode 100644 report/test/PFL_Relay.t.sol.gcov.html delete mode 100644 report/test/index-sort-b.html delete mode 100644 report/test/index-sort-f.html delete mode 100644 report/test/index-sort-l.html delete mode 100644 report/test/index.html delete mode 100644 report/test/legacy-test/PFLAuction.t.sol.func-sort-c.html delete mode 100644 report/test/legacy-test/PFLAuction.t.sol.func.html delete mode 100644 report/test/legacy-test/PFLAuction.t.sol.gcov.html delete mode 100644 report/test/legacy-test/index-sort-b.html delete mode 100644 report/test/legacy-test/index-sort-f.html delete mode 100644 report/test/legacy-test/index-sort-l.html delete mode 100644 report/test/legacy-test/index.html delete mode 100644 report/test/mocks/MockPaymentProcessor.sol.func-sort-c.html delete mode 100644 report/test/mocks/MockPaymentProcessor.sol.func.html delete mode 100644 report/test/mocks/MockPaymentProcessor.sol.gcov.html delete mode 100644 report/test/mocks/index-sort-b.html delete mode 100644 report/test/mocks/index-sort-f.html delete mode 100644 report/test/mocks/index-sort-l.html delete mode 100644 report/test/mocks/index.html delete mode 100644 report/updown.png delete mode 100644 test/legacy-test/PFLAuction.t.sol delete mode 100644 test/legacy-test/PFLDeploy.t.sol delete mode 100644 yarn-error.log diff --git a/.gitignore b/.gitignore index e207af0..3ce3d49 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,6 @@ soljson-* mnemonic* .mnemonic* tmp/ -broadcast/ \ No newline at end of file +broadcast/ +lcov.info +report diff --git a/broadcast/PreProxyDeploy.s.sol/137/run-1659050856.json b/broadcast/PreProxyDeploy.s.sol/137/run-1659050856.json deleted file mode 100644 index f471d25..0000000 --- a/broadcast/PreProxyDeploy.s.sol/137/run-1659050856.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "transactions": [ - { - "hash": null, - "type": "CREATE", - "contractAddress": "0xc71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "tx": { - "type": "0x02", - "from": "0x1ba0f96bf6b26df11a58553c6db9a0314938cf70", - "gas": "0x89157c", - "value": "0x0", - "data": "0x608060405234801561001057600080fd5b5060405161797438038061797483398101604081905261002f91610440565b7fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80546001600160a01b031990811673b3f5503f93d5ef84b06993a1975b9d21b962892f9081179092557f2bda5adf664a0c31bf9134cad8d937629fcee52b9cefd545e0c716efa1202a518054821673527a819db1eb0e34426297b03bae11f2f8b3a19e1790557fa8c57e13d49dd6e2870c5d5f809130d4d18970dd320604381d96a20d80a714f480548216831790557fa3e343505a37a5f41b372e3722e1aa14239f74a613d1511ba6a638cac5ed8589805482169092179091557fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e08054821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790557f0cb0be258cd4e0f89ef5514ec447dd8846b0cf865c7d0d8ea82ff58a1eae81a180548216730d500b1d8e8ef31e21c99d1db9a6444d3adf12701790557f2af04f721798314fc694a46b3db9f8005ee5d928ceb0c93e438e01e3ac240ed480548216739c3c9283d3e44854697cd22d3faa240cfb0328899081179091557f7a1c85dbd356d1ede4c0e23eb93fed1980e3ae3583babceeae9b100fd153ad6e8054909216179055466000908152600160209081526040808320546002909252909120546001600160a01b039081169116806102515760405162461bcd60e51b81526020600482015260066024820152654f286f29707360d01b60448201526064015b60405180910390fd5b6001600160a01b0382166102915760405162461bcd60e51b815260206004820152600760248201526615dc985c1c195960ca1b6044820152606401610248565b61029c8383836102a4565b505050610459565b826040516102b190610433565b8190604051809103906000f59050801580156102d1573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216918217905561032a5760405162461bcd60e51b815260206004820152600a60248201526915dc9bdb99c81a5b9a5d60b21b6044820152606401610248565b6000546040516001600160a01b0390911681527fa89c1a761177532f843f74a1ba026520efa520185852784cc804d057c8b96a5f9060200160405180910390a160005460405163784d200b60e11b81526001600160a01b03848116600483015283811660248301529091169063f09a401690604401600060405180830381600087803b1580156103b957600080fd5b505af11580156103cd573d6000803e3d6000fd5b505060005460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b50505050505050565b6138f58061407f83390190565b60006020828403121561045257600080fd5b5051919050565b613c17806104686000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630e2920441461005c5780637d0464521461008c5780637f79c601146100b55780638c880723146100de57806396ca14b114610110575b600080fd5b60005461006f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61006f61009a3660046102c1565b6002602052600090815260409020546001600160a01b031681565b61006f6100c33660046102c1565b6001602052600090815260409020546001600160a01b031681565b6100f16100ec3660046102c1565b61014a565b604080516001600160a01b039093168352901515602083015201610083565b4660009081526001602090815260408083205460028352928190205481516001600160a01b03918216815293169183019190915201610083565b46600090815260016020908152604080832054600290925282205482916001600160a01b039182169116806101af5760405162461bcd60e51b81526020600482015260066024820152654f286f29707360d01b60448201526064015b60405180910390fd5b6001600160a01b0382166101ef5760405162461bcd60e51b815260206004820152600760248201526615dc985c1c195960ca1b60448201526064016101a6565b60ff60f81b308660405180602001610206906102b4565b601f1982820381018352601f90910116604081905261022891906020016102da565b6040516020818303038152906040528051906020012060405160200161028594939291906001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051601f198184030181529190528051602090910120956001600160a01b0387163b151595509350505050565b6138f58061031683390190565b6000602082840312156102d357600080fd5b5035919050565b6000825160005b818110156102fb57602081860181015185830152016102e1565b8181111561030a576000828501525b50919091019291505056fe6080604052678ac7230489e800006004557001000000000000006c6b935b8bbd400000600555600680546001600160c01b031916730a00c35000000000000000000000002e90edd0001790556000600c553480156200005d57600080fd5b50620000693362000073565b60018055620000c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61382280620000d36000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c8063715018a611610167578063d30c9952116100ce578063e70abe9211610087578063e70abe921461077c578063e9e0953f1461078f578063f09a40161461079d578063f2fde38b146107b0578063fa2e750b146107c3578063fe67a54b146107e457600080fd5b8063d30c995214610708578063db4b9dc01461071b578063db9f60ff1461072e578063dde8119f14610741578063e004f5de14610749578063e3d2400f1461075c57600080fd5b806398427177116101205780639842717714610686578063afb8327114610699578063b72ccf37146106ac578063c15ffd87146106d6578063c6e11004146106e9578063cf5303cf146106f257600080fd5b8063715018a6146105fc57806374ecaa7d146106045780637d495139146106175780637ffaa99c1461062a5780638da5cb5b1461064e5780639035b0831461067357600080fd5b80633963510b1161020b57806359a5ea75116101c457806359a5ea751461058a5780635c1a928a146105a45780635c7e9db8146105b757806360448443146105ca578063652eba9b146105e15780636b64c769146105f457600080fd5b80633963510b146104175780633bd950731461042a5780633d621e4c1461043d5780633e53ec7314610468578063501ee12614610536578063559202d51461054957600080fd5b8063219ee3941161025d578063219ee3941461037b57806326371b841461038e5780632897c4f3146103a15780632932b55e146103b457806330ccebb5146103c75780633535228c146103e757600080fd5b806303fddc0d1461029a57806306c7a236146102af57806308fe95b51461032d5780630aa0ce5c146103555780630b58e6db14610368575b600080fd5b6102ad6102a83660046130cc565b6107ec565b005b6103046102bd366004613107565b604080518082018252600080825260209182018190526001600160a01b039384168152600b8252829020825180840190935280548352600101549092169181019190915290565b60408051825181526020928301516001600160a01b031692810192909252015b60405180910390f35b60065461034290600160981b900461ffff1681565b60405161ffff9091168152602001610324565b6102ad610363366004613124565b610874565b6102ad6103763660046130cc565b61095c565b6102ad610389366004613149565b6109d4565b6102ad61039c36600461316b565b610a1c565b6102ad6103af366004613107565b610a5f565b6102ad6103c23660046131b4565b610b96565b6103da6103d5366004613107565b610d27565b604051610324919061323f565b6103fa6103f5366004613292565b610dc6565b604080519283526001600160801b03909116602083015201610324565b6102ad610425366004613107565b610e81565b6102ad610438366004613107565b611004565b600554610450906001600160801b031681565b6040516001600160801b039091168152602001610324565b6104f6610476366004613107565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600a6020908152604091829020825160808101845281548152600182015492810192909252600201546001600160801b0380821693830193909352600160801b9004909116606082015290565b604080518251815260208084015190820152828201516001600160801b039081169282019290925260609283015190911691810191909152608001610324565b6102ad610544366004613107565b61103a565b61055c6105573660046132cb565b611119565b6040805193151584526001600160a01b0390921660208401526001600160801b031690820152606001610324565b60055461045090600160801b90046001600160801b031681565b6102ad6105b236600461330b565b6111d5565b6102ad6105c5366004613107565b611252565b6105d3600c5481565b604051908152602001610324565b6102ad6105ef366004613107565b6112ca565b6102ad6113e5565b6102ad61148e565b6102ad610612366004613326565b6114c4565b6102ad61062536600461333f565b611523565b60065461063e90600160a81b900460ff1681565b6040519015158152602001610324565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610324565b6102ad610681366004613357565b611cf7565b61055c610694366004613292565b611d4c565b6102ad6106a7366004613326565b611d70565b6006546106c290600160801b900462ffffff1681565b60405162ffffff9091168152602001610324565b6102ad6106e4366004613107565b611e43565b6105d360045481565b6106fa611e73565b604051610324929190613373565b6102ad610716366004613107565b611f81565b600654610450906001600160801b031681565b6102ad61073c366004613149565b6120c5565b61045061213c565b60025461065b906001600160a01b031681565b61076f61076a3660046130cc565b612163565b6040516103249190613416565b60035461065b906001600160a01b031681565b6104506001600160801b0381565b6102ad6107ab366004613292565b61218d565b6102ad6107be366004613107565b612224565b6107d66107d1366004613429565b6122bc565b60405161032492919061345c565b61063e61246f565b6000546001600160a01b0316331461081f5760405162461bcd60e51b81526004016108169061347f565b60405180910390fd5b600680546001600160801b0319166001600160801b0383169081179091556040519081527f256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c906020015b60405180910390a150565b6000546001600160a01b0316331461089e5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156108c85760405162461bcd60e51b8152600401610816906134b4565b620f42408162ffffff161061090a5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313360c01b6044820152606401610816565b6006805462ffffff60801b1916600160801b62ffffff8416908102919091179091556040519081527f255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda90602001610869565b6000546001600160a01b031633146109865760405162461bcd60e51b81526004016108169061347f565b600580546001600160801b0319166001600160801b0383169081179091556040519081527f516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f718027290602001610869565b6000546001600160a01b031633146109fe5760405162461bcd60e51b81526004016108169061347f565b60068054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016108169061347f565b610a4f836125ba565b610a5a83838361279a565b505050565b6000546001600160a01b03163314610a895760405162461bcd60e51b81526004016108169061347f565b6001600160a01b03811660009081526007602052604090206002600182015460ff166002811115610abc57610abc613229565b14610af45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b600654600090600160a81b900460ff16610b2057600554600160801b90046001600160801b0316610b3e565b600554610b3e90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f6b4dbdf55669f6c01188b405d3882517d953fb610502150c0720131e879f876e90600090a3505050565b600260015403610bb85760405162461bcd60e51b815260040161081690613517565b60026001556003546001600160a01b03163314610c025760405162461bcd60e51b815260206004820152600860248201526723261d229698981b60c11b6044820152606401610816565b600654600160b81b900460ff16158015610c265750600654600160b01b900460ff16155b610c5d5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6006546001600160801b03163a1115610ca35760405162461bcd60e51b8152602060048201526008602482015267464c3a452d33303760c01b6044820152606401610816565b8060005b81811015610d1d576000848483818110610cc357610cc361354e565b9050602002016020810190610cd89190613107565b6001600160a01b031614610d1557610d15848483818110610cfb57610cfb61354e565b9050602002016020810190610d109190613107565b6128d1565b600101610ca7565b5050600180555050565b610d4860408051606081018252600080825260208201819052909182015290565b6001600160a01b038216600090815260076020908152604091829020825160608101845281546001600160801b038082168352600160801b90910416928101929092526001810154919290919083019060ff166002811115610dac57610dac613229565b6002811115610dbd57610dbd613229565b90525092915050565b6006546000908190600160a81b900460ff16610df45760405162461bcd60e51b815260040161081690613564565b5050600554600160801b90046001600160801b031660008181526008602090815260408083206001600160a01b0396871684528252808320948616835293815290839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093526003830154909316606084015260049091015460809092018290529091565b6000546001600160a01b03163314610eab5760405162461bcd60e51b81526004016108169061347f565b600260015403610ecd5760405162461bcd60e51b815260040161081690613517565b60026001819055546001600160a01b0390811690821603610f1b5760405162461bcd60e51b815260206004820152600860248201526723261d229698981960c11b6044820152606401610816565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190613586565b90508015610ffb57610fb6610fa56000546001600160a01b031690565b6001600160a01b0384169083612afb565b6000546040518281526001600160a01b039091169030907f6c9d637297625e945b296ff73a71fcfbd0a9e062652b6491a921c4c60194176b9060200160405180910390a35b50506001805550565b6000546001600160a01b0316331461102e5760405162461bcd60e51b81526004016108169061347f565b611037816125ba565b50565b6000546001600160a01b031633146110645760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff161561108e5760405162461bcd60e51b8152600401610816906134b4565b6001600160a01b0381166110cf5760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3030360c41b6044820152606401610816565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc990600090a250565b600554600090819081906001600160801b03600160801b9091048116908716106111705760405162461bcd60e51b8152602060048201526008602482015267464c2d453a32303160c01b6044820152606401610816565b6001600160801b03861660009081526008602090815260408083206001600160a01b03808a1685529083528184208882168552909252909120600201541680156111c2576001935091508590506111cc565b6000935091508590505b93509350939050565b6000546001600160a01b031633146111ff5760405162461bcd60e51b81526004016108169061347f565b6006805461ffff60981b1916600160981b61ffff8481168202929092179283905560405192041681527ff20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e4890602001610869565b6000546001600160a01b0316331461127c5760405162461bcd60e51b81526004016108169061347f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b455090602001610869565b6000546001600160a01b031633146112f45760405162461bcd60e51b81526004016108169061347f565b6001600160a01b038116600090815260076020526040902060018082015460ff16600281111561132657611326613229565b146113435760405162461bcd60e51b81526004016108169061359f565b600654600090600160a81b900460ff1661136f57600554600160801b90046001600160801b031661138d565b60055461138d90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f50b47e81a29bef5bc0c09d99b7ac8fc76d78e6b3c3590301827bd4b67bc8840990600090a3505050565b6000546001600160a01b0316331461140f5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156114395760405162461bcd60e51b8152600401610816906134b4565b60068054600160a81b60ff60a81b19909116179055600554604051600160801b9091046001600160801b0316907f38b040053f48d9e3c983bb3a552b8323820ff833ceb2534f3099c195b105cc6c90600090a2565b6000546001600160a01b031633146114b85760405162461bcd60e51b81526004016108169061347f565b6114c26000612b79565b565b6000546001600160a01b031633146114ee5760405162461bcd60e51b81526004016108169061347f565b60048190556040518181527f7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a690602001610869565b600654600160a81b900460ff1661154c5760405162461bcd60e51b815260040161081690613564565b600654600160b01b900460ff16156115915760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6002600154036115b35760405162461bcd60e51b815260040161081690613517565b60026001556115c86080820160608301613107565b6001600160a01b0316336001600160a01b0316146116135760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303360c01b6044820152606401610816565b60006007816116256020850185613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561168657611686613229565b600281111561169757611697613229565b905250905060006007816116b16040860160208701613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561171257611712613229565b600281111561172357611723613229565b905250905060018260400151600281111561174057611740613229565b1461175d5760405162461bcd60e51b81526004016108169061359f565b60028160400151600281111561177557611775613229565b146117ad5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b60055460208301516001600160801b03600160801b90920482169116116118015760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303960c01b6044820152606401610816565b60055460208201516001600160801b03600160801b90920482169116116118555760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3231360c41b6044820152606401610816565b60055482516001600160801b03600160801b9092048216911611156118a75760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313160c01b6044820152606401610816565b60055481516001600160801b03600160801b9092048216911611156118f95760405162461bcd60e51b815260206004820152600860248201526723261d229699189960c11b6044820152606401610816565b600554600160801b90046001600160801b03166000908152600860209081526040822090829061192b90870187613107565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906119609190613107565b6001600160a01b03908116825260208083019390935260409182016000908120835160a0810185528154841681526001820154841681870152600282015484169481019490945260038101549092166060840152600490910154608083015290925090600a9082906119d490880188613107565b6001600160a01b0316815260208101919091526040016000206005546002820154919250600160801b918290046001600160801b03908116929091041614801590611a1f5750805415155b15611a44578054600182018054600090611a3a9084906135c1565b9091555050600081555b600554600160801b90046001600160801b03166000908152600860209081526040822087929091611a7790840184613107565b6001600160a01b03166001600160a01b031681526020019081526020016000206000876020016020810190611aac9190613107565b6001600160a01b031681526020810191909152604001600020611acf82826135f9565b5050608082015115611b6d57600080611aeb8460800151612bc9565b91509150600080611aff8960800135612bc9565b915091508281600c54611b1291906135c1565b611b1c9190613671565b600c5584548490611b2e9084906135c1565b611b389190613671565b8555611b5b611b4c368b90038b018b61369e565b87608001518860600151612c18565b611b6486612d87565b50505050611c1d565b6005546002820154600160801b918290046001600160801b03908116929091041614611bbb576005546002820180546001600160801b03600160801b93849004811690930292169190911790555b600080611bcb8760800135612bc9565b9150915080600c6000828254611be191906135c1565b9091555050825482908490600090611bfa9084906135c1565b90915550611c1a9050611c123689900389018961369e565b600080612c18565b50505b611c54611c2d6020870187613107565b600554600160801b90046001600160801b0316600090815260096020526040902090612da9565b50600554600160801b90046001600160801b0316611c786040870160208801613107565b6001600160a01b0316611c8e6020880188613107565b6001600160a01b03167fed843d47bb78802ebc13e8996623a126d58b999326562053c253db476fb522fa611cc860608a0160408b01613107565b604080516001600160a01b03909216825260808b013560208301520160405180910390a4505060018055505050565b60013360009081526007602052604090206001015460ff166002811115611d2057611d20613229565b14611d3d5760405162461bcd60e51b81526004016108169061359f565b611d4833838361279a565b5050565b6000806000611d63611d5c61213c565b8686611119565b9250925092509250925092565b6000546001600160a01b03163314611d9a5760405162461bcd60e51b81526004016108169061347f565b600260015403611dbc5760405162461bcd60e51b815260040161081690613517565b6002600155478111611e3c57611ded81611dde6000546001600160a01b031690565b6001600160a01b031690612dc5565b6000546001600160a01b03166001600160a01b03167f90881b74cde864d3a0b48a1be016fa7c3217b5dc2b02f4f65544ff1dfa92196982604051611e3391815260200190565b60405180910390a25b5060018055565b600260015403611e655760405162461bcd60e51b815260040161081690613517565b6002600155611e3c816128d1565b600654600090606090600160b81b900460ff1680611e9a5750600654600160b01b900460ff165b80611eaf57506006546001600160801b03163a115b15611ec95750506040805160208101909152600080825291565b6006546005546000935083918291611f0391600160981b900461ffff16906107d190600190600160801b90046001600160801b031661373a565b915091508115611f6557604051600194506314995aaf60e11b90611f2b908390602401613416565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152939492505050565b6000604051806020016040528060008152509350935050509091565b6000546001600160a01b03163314611fab5760405162461bcd60e51b81526004016108169061347f565b600654600090600160a81b900460ff16611fd757600554600160801b90046001600160801b0316611ff5565b600554611ff590600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600290526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561207b5761207b613229565b0217905550506040516001600160801b03831691506001600160a01b038416907f8bbd4ebefde66f702715e863992cd517982ed361339dc6b787ed8b397213fc4b90600090a35050565b6000546001600160a01b031633146120ef5760405162461bcd60e51b81526004016108169061347f565b60068054821515600160b01b0260ff60b01b199091161790556040517fa9bfed3d98385b3777389e321dbde773cf7d335fa604fefbae3dca93564f55869061086990831515815260200190565b60055460009061215e90600190600160801b90046001600160801b031661373a565b905090565b6001600160801b038116600090815260096020526040902060609061218790612ede565b92915050565b6000546001600160a01b031633146121b75760405162461bcd60e51b81526004016108169061347f565b6121c08261103a565b6121c981611252565b600580546001600160801b0316600160801b1790556121ef678ac7230489e800006114c4565b612201686c6b935b8bbd40000061095c565b61220f642e90edd0006107ec565b61221a61c350610874565b611d48600a6111d5565b6000546001600160a01b0316331461224e5760405162461bcd60e51b81526004016108169061347f565b6001600160a01b0381166122b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610816565b61103781612b79565b600060608361ffff1667ffffffffffffffff8111156122dd576122dd613688565b604051908082528060200260200182016040528015612306578160200160208202803683370190505b506001600160801b03841660009081526009602052604081209192508061232c83612eeb565b905060005b8181101561245c5760006123458583612ef5565b6001600160a01b0381166000818152600a602090815260408083208151608081018352815481526001820154818501526002909101546001600160801b0380821683850152600160801b90910481166060830152948452600b909252822054600554949550909391929190911610156123d6576001600160a01b0383166000908152600b60205260409020546123e3565b6005546001600160801b03165b90506123ef8282612f01565b1561242f5782888761ffff168151811061240b5761240b61354e565b6001600160a01b039092166020928302919091019091015261242c86613762565b95505b8a61ffff168661ffff16106124465750505061245c565b505050808061245490613783565b915050612331565b505061ffff161515959194509092505050565b600080546001600160a01b0316331461249a5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff166124c35760405162461bcd60e51b815260040161081690613564565b6002600154036124e55760405162461bcd60e51b815260040161081690613517565b60026001556006805460ff60a81b19169055600554604051600160801b9091046001600160801b0316907f95bed6fbde15e474e4ad8a6d2aaa4a759e6e383d33f8de7c945369167ebf849090600090a26005805460109061255590600160801b90046001600160801b031661379c565b91906101000a8154816001600160801b0302191690836001600160801b031602179055506000600c5490506000600c819055506125b061259d6000546001600160a01b031690565b6002546001600160a01b03169083612afb565b5050600180805590565b600654600090600160a81b900460ff166125e657600554600160801b90046001600160801b0316612604565b60055461260490600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600190526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561268a5761268a613229565b021790555050506001600160a01b0382166000908152600a60209081526040808320815160808101835281548152600182015493810193909352600201546001600160801b0380821692840192909252600160801b90041660608201819052909103612756576040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b038a168552600a909352949092209251835590516001830155915191516001600160801b03908116600160801b029216919091176002909101555b6040516001600160801b038316906001600160a01b038516907f197eaede07bece72c8e0d907669d15a7f24328f239a5f1c28ccefc94bfadb35890600090a3505050565b6005546001600160801b0390811690831610156127e45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b6001600160a01b0381161580159061280557506001600160a01b0381163014155b61283c5760405162461bcd60e51b815260206004820152600860248201526723261d229699181960c11b6044820152606401610816565b6040805180820182526001600160801b0384168082526001600160a01b0384811660208085018281528984166000818152600b8452889020965187559051600190960180546001600160a01b031916969094169590951790925584519283529082015290917fec42a6c8c2a3b9298ec01f8c989a25ba1341377172e59d478ac6780a89451634910160405180910390a2505050565b60016001600160a01b03821660009081526007602052604090206001015460ff16600281111561290357612903613229565b146129205760405162461bcd60e51b81526004016108169061359f565b6001600160a01b0381166000908152600a60209081526040918290208251608081018452815481526001808301549382019390935260028201546001600160801b0380821695830195909552600160801b900490931660608401529161298591612f01565b6129bc5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303760c01b6044820152606401610816565b60055460028201546000916001600160801b03600160801b918290048116919092049091161015612a0357600182015482546129f891906135c1565b600083559050612a0a565b5060018101545b60006001838101829055600554600285018054600160801b9092046001600160801b03166001600160801b03199092169190911790556001600160a01b038581168352600b6020908152604093849020845180860190955280548552909201541690820181905284919015612a8157806020015191505b600254612a98906001600160a01b03168385612afb565b600554604080518581526001600160a01b0385811660208301523393600160801b90046001600160801b031692908916917f81c1b0e2611c67c291f656df4c6cd2c85bf255152046acdccd8df8a5ee303456910160405180910390a45050505050565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612b735760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610816565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006546000908190620f424090612bec90600160801b900462ffffff16826137b8565b612bfb9062ffffff16856137d4565b612c0591906137f3565b9150612c118284613671565b9050915091565b600454612c2590836135c1565b83608001511015612c635760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b806001600160a01b031683606001516001600160a01b031603612cb35760405162461bcd60e51b815260206004820152600860248201526711930e914b4c8c0d60c21b6044820152606401610816565b608083015160025460608501516040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015612d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613586565b1015612d635760405162461bcd60e51b815260206004820152600860248201526723261d229699181b60c11b6044820152606401610816565b60608301516080840151600254610a5a926001600160a01b03909116913090612f51565b60608101516080820151600254611037926001600160a01b0390911691612afb565b6000612dbe836001600160a01b038416612fdb565b9392505050565b80471015612e155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610816565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e62576040519150601f19603f3d011682016040523d82523d6000602084013e612e67565b606091505b5050905080610a5a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610816565b60606000612dbe8361302a565b6000612187825490565b6000612dbe8383613086565b6000818360200151101580612dbe5750602083015183518391612f23916135c1565b10158015612dbe575060055460608401516001600160801b03600160801b9092048216911610905092915050565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080612fd45760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610816565b5050505050565b600081815260018301602052604081205461302257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612187565b506000612187565b60608160000180548060200260200160405190810160405280929190818152602001828054801561307a57602002820191906000526020600020905b815481526020019060010190808311613066575b50505050509050919050565b600082600001828154811061309d5761309d61354e565b9060005260206000200154905092915050565b80356001600160801b03811681146130c757600080fd5b919050565b6000602082840312156130de57600080fd5b612dbe826130b0565b6001600160a01b038116811461103757600080fd5b80356130c7816130e7565b60006020828403121561311957600080fd5b8135612dbe816130e7565b60006020828403121561313657600080fd5b813562ffffff81168114612dbe57600080fd5b60006020828403121561315b57600080fd5b81358015158114612dbe57600080fd5b60008060006060848603121561318057600080fd5b833561318b816130e7565b9250613199602085016130b0565b915060408401356131a9816130e7565b809150509250925092565b600080602083850312156131c757600080fd5b823567ffffffffffffffff808211156131df57600080fd5b818501915085601f8301126131f357600080fd5b81358181111561320257600080fd5b8660208260051b850101111561321757600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052602160045260246000fd5b60006060820190506001600160801b038084511683528060208501511660208401525060408301516003811061328557634e487b7160e01b600052602160045260246000fd5b8060408401525092915050565b600080604083850312156132a557600080fd5b82356132b0816130e7565b915060208301356132c0816130e7565b809150509250929050565b6000806000606084860312156132e057600080fd5b6132e9846130b0565b92506020840135613199816130e7565b803561ffff811681146130c757600080fd5b60006020828403121561331d57600080fd5b612dbe826132f9565b60006020828403121561333857600080fd5b5035919050565b600060a0828403121561335157600080fd5b50919050565b6000806040838503121561336a57600080fd5b6132b0836130b0565b821515815260006020604081840152835180604085015260005b818110156133a95785810183015185820160600152820161338d565b818111156133bb576000606083870101525b50601f01601f191692909201606001949350505050565b600081518084526020808501945080840160005b8381101561340b5781516001600160a01b0316875295820195908201906001016133e6565b509495945050505050565b602081526000612dbe60208301846133d2565b6000806040838503121561343c57600080fd5b613445836132f9565b9150613453602084016130b0565b90509250929050565b821515815260406020820152600061347760408301846133d2565b949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260089082015267464c3a452d33303160c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b0380831681851680830382111561350e5761350e6134d6565b01949350505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526008908201526723261d229699981960c11b604082015260600190565b60006020828403121561359857600080fd5b5051919050565b60208082526008908201526711930e914b4c4c0d60c21b604082015260600190565b600082198211156135d4576135d46134d6565b500190565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135613604816130e7565b61360e81836135d9565b50602082013561361d816130e7565b61362a81600184016135d9565b506040820135613639816130e7565b61364681600284016135d9565b506060820135613655816130e7565b61366281600384016135d9565b50608082013560048201555050565b600082821015613683576136836134d6565b500390565b634e487b7160e01b600052604160045260246000fd5b600060a082840312156136b057600080fd5b60405160a0810181811067ffffffffffffffff821117156136e157634e487b7160e01b600052604160045260246000fd5b60405282356136ef816130e7565b815260208301356136ff816130e7565b6020820152613710604084016130fc565b6040820152613721606084016130fc565b6060820152608083013560808201528091505092915050565b60006001600160801b038381169083168181101561375a5761375a6134d6565b039392505050565b600061ffff808316818103613779576137796134d6565b6001019392505050565b600060018201613795576137956134d6565b5060010190565b60006001600160801b03808316818103613779576137796134d6565b600062ffffff8381169083168181101561375a5761375a6134d6565b60008160001904831182151516156137ee576137ee6134d6565b500290565b60008261381057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c634300080f000aa164736f6c634300080f000a6080604052678ac7230489e800006004557001000000000000006c6b935b8bbd400000600555600680546001600160c01b031916730a00c35000000000000000000000002e90edd0001790556000600c553480156200005d57600080fd5b50620000693362000073565b60018055620000c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61382280620000d36000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c8063715018a611610167578063d30c9952116100ce578063e70abe9211610087578063e70abe921461077c578063e9e0953f1461078f578063f09a40161461079d578063f2fde38b146107b0578063fa2e750b146107c3578063fe67a54b146107e457600080fd5b8063d30c995214610708578063db4b9dc01461071b578063db9f60ff1461072e578063dde8119f14610741578063e004f5de14610749578063e3d2400f1461075c57600080fd5b806398427177116101205780639842717714610686578063afb8327114610699578063b72ccf37146106ac578063c15ffd87146106d6578063c6e11004146106e9578063cf5303cf146106f257600080fd5b8063715018a6146105fc57806374ecaa7d146106045780637d495139146106175780637ffaa99c1461062a5780638da5cb5b1461064e5780639035b0831461067357600080fd5b80633963510b1161020b57806359a5ea75116101c457806359a5ea751461058a5780635c1a928a146105a45780635c7e9db8146105b757806360448443146105ca578063652eba9b146105e15780636b64c769146105f457600080fd5b80633963510b146104175780633bd950731461042a5780633d621e4c1461043d5780633e53ec7314610468578063501ee12614610536578063559202d51461054957600080fd5b8063219ee3941161025d578063219ee3941461037b57806326371b841461038e5780632897c4f3146103a15780632932b55e146103b457806330ccebb5146103c75780633535228c146103e757600080fd5b806303fddc0d1461029a57806306c7a236146102af57806308fe95b51461032d5780630aa0ce5c146103555780630b58e6db14610368575b600080fd5b6102ad6102a83660046130cc565b6107ec565b005b6103046102bd366004613107565b604080518082018252600080825260209182018190526001600160a01b039384168152600b8252829020825180840190935280548352600101549092169181019190915290565b60408051825181526020928301516001600160a01b031692810192909252015b60405180910390f35b60065461034290600160981b900461ffff1681565b60405161ffff9091168152602001610324565b6102ad610363366004613124565b610874565b6102ad6103763660046130cc565b61095c565b6102ad610389366004613149565b6109d4565b6102ad61039c36600461316b565b610a1c565b6102ad6103af366004613107565b610a5f565b6102ad6103c23660046131b4565b610b96565b6103da6103d5366004613107565b610d27565b604051610324919061323f565b6103fa6103f5366004613292565b610dc6565b604080519283526001600160801b03909116602083015201610324565b6102ad610425366004613107565b610e81565b6102ad610438366004613107565b611004565b600554610450906001600160801b031681565b6040516001600160801b039091168152602001610324565b6104f6610476366004613107565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600a6020908152604091829020825160808101845281548152600182015492810192909252600201546001600160801b0380821693830193909352600160801b9004909116606082015290565b604080518251815260208084015190820152828201516001600160801b039081169282019290925260609283015190911691810191909152608001610324565b6102ad610544366004613107565b61103a565b61055c6105573660046132cb565b611119565b6040805193151584526001600160a01b0390921660208401526001600160801b031690820152606001610324565b60055461045090600160801b90046001600160801b031681565b6102ad6105b236600461330b565b6111d5565b6102ad6105c5366004613107565b611252565b6105d3600c5481565b604051908152602001610324565b6102ad6105ef366004613107565b6112ca565b6102ad6113e5565b6102ad61148e565b6102ad610612366004613326565b6114c4565b6102ad61062536600461333f565b611523565b60065461063e90600160a81b900460ff1681565b6040519015158152602001610324565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610324565b6102ad610681366004613357565b611cf7565b61055c610694366004613292565b611d4c565b6102ad6106a7366004613326565b611d70565b6006546106c290600160801b900462ffffff1681565b60405162ffffff9091168152602001610324565b6102ad6106e4366004613107565b611e43565b6105d360045481565b6106fa611e73565b604051610324929190613373565b6102ad610716366004613107565b611f81565b600654610450906001600160801b031681565b6102ad61073c366004613149565b6120c5565b61045061213c565b60025461065b906001600160a01b031681565b61076f61076a3660046130cc565b612163565b6040516103249190613416565b60035461065b906001600160a01b031681565b6104506001600160801b0381565b6102ad6107ab366004613292565b61218d565b6102ad6107be366004613107565b612224565b6107d66107d1366004613429565b6122bc565b60405161032492919061345c565b61063e61246f565b6000546001600160a01b0316331461081f5760405162461bcd60e51b81526004016108169061347f565b60405180910390fd5b600680546001600160801b0319166001600160801b0383169081179091556040519081527f256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c906020015b60405180910390a150565b6000546001600160a01b0316331461089e5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156108c85760405162461bcd60e51b8152600401610816906134b4565b620f42408162ffffff161061090a5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313360c01b6044820152606401610816565b6006805462ffffff60801b1916600160801b62ffffff8416908102919091179091556040519081527f255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda90602001610869565b6000546001600160a01b031633146109865760405162461bcd60e51b81526004016108169061347f565b600580546001600160801b0319166001600160801b0383169081179091556040519081527f516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f718027290602001610869565b6000546001600160a01b031633146109fe5760405162461bcd60e51b81526004016108169061347f565b60068054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016108169061347f565b610a4f836125ba565b610a5a83838361279a565b505050565b6000546001600160a01b03163314610a895760405162461bcd60e51b81526004016108169061347f565b6001600160a01b03811660009081526007602052604090206002600182015460ff166002811115610abc57610abc613229565b14610af45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b600654600090600160a81b900460ff16610b2057600554600160801b90046001600160801b0316610b3e565b600554610b3e90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f6b4dbdf55669f6c01188b405d3882517d953fb610502150c0720131e879f876e90600090a3505050565b600260015403610bb85760405162461bcd60e51b815260040161081690613517565b60026001556003546001600160a01b03163314610c025760405162461bcd60e51b815260206004820152600860248201526723261d229698981b60c11b6044820152606401610816565b600654600160b81b900460ff16158015610c265750600654600160b01b900460ff16155b610c5d5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6006546001600160801b03163a1115610ca35760405162461bcd60e51b8152602060048201526008602482015267464c3a452d33303760c01b6044820152606401610816565b8060005b81811015610d1d576000848483818110610cc357610cc361354e565b9050602002016020810190610cd89190613107565b6001600160a01b031614610d1557610d15848483818110610cfb57610cfb61354e565b9050602002016020810190610d109190613107565b6128d1565b600101610ca7565b5050600180555050565b610d4860408051606081018252600080825260208201819052909182015290565b6001600160a01b038216600090815260076020908152604091829020825160608101845281546001600160801b038082168352600160801b90910416928101929092526001810154919290919083019060ff166002811115610dac57610dac613229565b6002811115610dbd57610dbd613229565b90525092915050565b6006546000908190600160a81b900460ff16610df45760405162461bcd60e51b815260040161081690613564565b5050600554600160801b90046001600160801b031660008181526008602090815260408083206001600160a01b0396871684528252808320948616835293815290839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093526003830154909316606084015260049091015460809092018290529091565b6000546001600160a01b03163314610eab5760405162461bcd60e51b81526004016108169061347f565b600260015403610ecd5760405162461bcd60e51b815260040161081690613517565b60026001819055546001600160a01b0390811690821603610f1b5760405162461bcd60e51b815260206004820152600860248201526723261d229698981960c11b6044820152606401610816565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190613586565b90508015610ffb57610fb6610fa56000546001600160a01b031690565b6001600160a01b0384169083612afb565b6000546040518281526001600160a01b039091169030907f6c9d637297625e945b296ff73a71fcfbd0a9e062652b6491a921c4c60194176b9060200160405180910390a35b50506001805550565b6000546001600160a01b0316331461102e5760405162461bcd60e51b81526004016108169061347f565b611037816125ba565b50565b6000546001600160a01b031633146110645760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff161561108e5760405162461bcd60e51b8152600401610816906134b4565b6001600160a01b0381166110cf5760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3030360c41b6044820152606401610816565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc990600090a250565b600554600090819081906001600160801b03600160801b9091048116908716106111705760405162461bcd60e51b8152602060048201526008602482015267464c2d453a32303160c01b6044820152606401610816565b6001600160801b03861660009081526008602090815260408083206001600160a01b03808a1685529083528184208882168552909252909120600201541680156111c2576001935091508590506111cc565b6000935091508590505b93509350939050565b6000546001600160a01b031633146111ff5760405162461bcd60e51b81526004016108169061347f565b6006805461ffff60981b1916600160981b61ffff8481168202929092179283905560405192041681527ff20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e4890602001610869565b6000546001600160a01b0316331461127c5760405162461bcd60e51b81526004016108169061347f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b455090602001610869565b6000546001600160a01b031633146112f45760405162461bcd60e51b81526004016108169061347f565b6001600160a01b038116600090815260076020526040902060018082015460ff16600281111561132657611326613229565b146113435760405162461bcd60e51b81526004016108169061359f565b600654600090600160a81b900460ff1661136f57600554600160801b90046001600160801b031661138d565b60055461138d90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f50b47e81a29bef5bc0c09d99b7ac8fc76d78e6b3c3590301827bd4b67bc8840990600090a3505050565b6000546001600160a01b0316331461140f5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156114395760405162461bcd60e51b8152600401610816906134b4565b60068054600160a81b60ff60a81b19909116179055600554604051600160801b9091046001600160801b0316907f38b040053f48d9e3c983bb3a552b8323820ff833ceb2534f3099c195b105cc6c90600090a2565b6000546001600160a01b031633146114b85760405162461bcd60e51b81526004016108169061347f565b6114c26000612b79565b565b6000546001600160a01b031633146114ee5760405162461bcd60e51b81526004016108169061347f565b60048190556040518181527f7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a690602001610869565b600654600160a81b900460ff1661154c5760405162461bcd60e51b815260040161081690613564565b600654600160b01b900460ff16156115915760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6002600154036115b35760405162461bcd60e51b815260040161081690613517565b60026001556115c86080820160608301613107565b6001600160a01b0316336001600160a01b0316146116135760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303360c01b6044820152606401610816565b60006007816116256020850185613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561168657611686613229565b600281111561169757611697613229565b905250905060006007816116b16040860160208701613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561171257611712613229565b600281111561172357611723613229565b905250905060018260400151600281111561174057611740613229565b1461175d5760405162461bcd60e51b81526004016108169061359f565b60028160400151600281111561177557611775613229565b146117ad5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b60055460208301516001600160801b03600160801b90920482169116116118015760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303960c01b6044820152606401610816565b60055460208201516001600160801b03600160801b90920482169116116118555760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3231360c41b6044820152606401610816565b60055482516001600160801b03600160801b9092048216911611156118a75760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313160c01b6044820152606401610816565b60055481516001600160801b03600160801b9092048216911611156118f95760405162461bcd60e51b815260206004820152600860248201526723261d229699189960c11b6044820152606401610816565b600554600160801b90046001600160801b03166000908152600860209081526040822090829061192b90870187613107565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906119609190613107565b6001600160a01b03908116825260208083019390935260409182016000908120835160a0810185528154841681526001820154841681870152600282015484169481019490945260038101549092166060840152600490910154608083015290925090600a9082906119d490880188613107565b6001600160a01b0316815260208101919091526040016000206005546002820154919250600160801b918290046001600160801b03908116929091041614801590611a1f5750805415155b15611a44578054600182018054600090611a3a9084906135c1565b9091555050600081555b600554600160801b90046001600160801b03166000908152600860209081526040822087929091611a7790840184613107565b6001600160a01b03166001600160a01b031681526020019081526020016000206000876020016020810190611aac9190613107565b6001600160a01b031681526020810191909152604001600020611acf82826135f9565b5050608082015115611b6d57600080611aeb8460800151612bc9565b91509150600080611aff8960800135612bc9565b915091508281600c54611b1291906135c1565b611b1c9190613671565b600c5584548490611b2e9084906135c1565b611b389190613671565b8555611b5b611b4c368b90038b018b61369e565b87608001518860600151612c18565b611b6486612d87565b50505050611c1d565b6005546002820154600160801b918290046001600160801b03908116929091041614611bbb576005546002820180546001600160801b03600160801b93849004811690930292169190911790555b600080611bcb8760800135612bc9565b9150915080600c6000828254611be191906135c1565b9091555050825482908490600090611bfa9084906135c1565b90915550611c1a9050611c123689900389018961369e565b600080612c18565b50505b611c54611c2d6020870187613107565b600554600160801b90046001600160801b0316600090815260096020526040902090612da9565b50600554600160801b90046001600160801b0316611c786040870160208801613107565b6001600160a01b0316611c8e6020880188613107565b6001600160a01b03167fed843d47bb78802ebc13e8996623a126d58b999326562053c253db476fb522fa611cc860608a0160408b01613107565b604080516001600160a01b03909216825260808b013560208301520160405180910390a4505060018055505050565b60013360009081526007602052604090206001015460ff166002811115611d2057611d20613229565b14611d3d5760405162461bcd60e51b81526004016108169061359f565b611d4833838361279a565b5050565b6000806000611d63611d5c61213c565b8686611119565b9250925092509250925092565b6000546001600160a01b03163314611d9a5760405162461bcd60e51b81526004016108169061347f565b600260015403611dbc5760405162461bcd60e51b815260040161081690613517565b6002600155478111611e3c57611ded81611dde6000546001600160a01b031690565b6001600160a01b031690612dc5565b6000546001600160a01b03166001600160a01b03167f90881b74cde864d3a0b48a1be016fa7c3217b5dc2b02f4f65544ff1dfa92196982604051611e3391815260200190565b60405180910390a25b5060018055565b600260015403611e655760405162461bcd60e51b815260040161081690613517565b6002600155611e3c816128d1565b600654600090606090600160b81b900460ff1680611e9a5750600654600160b01b900460ff165b80611eaf57506006546001600160801b03163a115b15611ec95750506040805160208101909152600080825291565b6006546005546000935083918291611f0391600160981b900461ffff16906107d190600190600160801b90046001600160801b031661373a565b915091508115611f6557604051600194506314995aaf60e11b90611f2b908390602401613416565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152939492505050565b6000604051806020016040528060008152509350935050509091565b6000546001600160a01b03163314611fab5760405162461bcd60e51b81526004016108169061347f565b600654600090600160a81b900460ff16611fd757600554600160801b90046001600160801b0316611ff5565b600554611ff590600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600290526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561207b5761207b613229565b0217905550506040516001600160801b03831691506001600160a01b038416907f8bbd4ebefde66f702715e863992cd517982ed361339dc6b787ed8b397213fc4b90600090a35050565b6000546001600160a01b031633146120ef5760405162461bcd60e51b81526004016108169061347f565b60068054821515600160b01b0260ff60b01b199091161790556040517fa9bfed3d98385b3777389e321dbde773cf7d335fa604fefbae3dca93564f55869061086990831515815260200190565b60055460009061215e90600190600160801b90046001600160801b031661373a565b905090565b6001600160801b038116600090815260096020526040902060609061218790612ede565b92915050565b6000546001600160a01b031633146121b75760405162461bcd60e51b81526004016108169061347f565b6121c08261103a565b6121c981611252565b600580546001600160801b0316600160801b1790556121ef678ac7230489e800006114c4565b612201686c6b935b8bbd40000061095c565b61220f642e90edd0006107ec565b61221a61c350610874565b611d48600a6111d5565b6000546001600160a01b0316331461224e5760405162461bcd60e51b81526004016108169061347f565b6001600160a01b0381166122b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610816565b61103781612b79565b600060608361ffff1667ffffffffffffffff8111156122dd576122dd613688565b604051908082528060200260200182016040528015612306578160200160208202803683370190505b506001600160801b03841660009081526009602052604081209192508061232c83612eeb565b905060005b8181101561245c5760006123458583612ef5565b6001600160a01b0381166000818152600a602090815260408083208151608081018352815481526001820154818501526002909101546001600160801b0380821683850152600160801b90910481166060830152948452600b909252822054600554949550909391929190911610156123d6576001600160a01b0383166000908152600b60205260409020546123e3565b6005546001600160801b03165b90506123ef8282612f01565b1561242f5782888761ffff168151811061240b5761240b61354e565b6001600160a01b039092166020928302919091019091015261242c86613762565b95505b8a61ffff168661ffff16106124465750505061245c565b505050808061245490613783565b915050612331565b505061ffff161515959194509092505050565b600080546001600160a01b0316331461249a5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff166124c35760405162461bcd60e51b815260040161081690613564565b6002600154036124e55760405162461bcd60e51b815260040161081690613517565b60026001556006805460ff60a81b19169055600554604051600160801b9091046001600160801b0316907f95bed6fbde15e474e4ad8a6d2aaa4a759e6e383d33f8de7c945369167ebf849090600090a26005805460109061255590600160801b90046001600160801b031661379c565b91906101000a8154816001600160801b0302191690836001600160801b031602179055506000600c5490506000600c819055506125b061259d6000546001600160a01b031690565b6002546001600160a01b03169083612afb565b5050600180805590565b600654600090600160a81b900460ff166125e657600554600160801b90046001600160801b0316612604565b60055461260490600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600190526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561268a5761268a613229565b021790555050506001600160a01b0382166000908152600a60209081526040808320815160808101835281548152600182015493810193909352600201546001600160801b0380821692840192909252600160801b90041660608201819052909103612756576040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b038a168552600a909352949092209251835590516001830155915191516001600160801b03908116600160801b029216919091176002909101555b6040516001600160801b038316906001600160a01b038516907f197eaede07bece72c8e0d907669d15a7f24328f239a5f1c28ccefc94bfadb35890600090a3505050565b6005546001600160801b0390811690831610156127e45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b6001600160a01b0381161580159061280557506001600160a01b0381163014155b61283c5760405162461bcd60e51b815260206004820152600860248201526723261d229699181960c11b6044820152606401610816565b6040805180820182526001600160801b0384168082526001600160a01b0384811660208085018281528984166000818152600b8452889020965187559051600190960180546001600160a01b031916969094169590951790925584519283529082015290917fec42a6c8c2a3b9298ec01f8c989a25ba1341377172e59d478ac6780a89451634910160405180910390a2505050565b60016001600160a01b03821660009081526007602052604090206001015460ff16600281111561290357612903613229565b146129205760405162461bcd60e51b81526004016108169061359f565b6001600160a01b0381166000908152600a60209081526040918290208251608081018452815481526001808301549382019390935260028201546001600160801b0380821695830195909552600160801b900490931660608401529161298591612f01565b6129bc5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303760c01b6044820152606401610816565b60055460028201546000916001600160801b03600160801b918290048116919092049091161015612a0357600182015482546129f891906135c1565b600083559050612a0a565b5060018101545b60006001838101829055600554600285018054600160801b9092046001600160801b03166001600160801b03199092169190911790556001600160a01b038581168352600b6020908152604093849020845180860190955280548552909201541690820181905284919015612a8157806020015191505b600254612a98906001600160a01b03168385612afb565b600554604080518581526001600160a01b0385811660208301523393600160801b90046001600160801b031692908916917f81c1b0e2611c67c291f656df4c6cd2c85bf255152046acdccd8df8a5ee303456910160405180910390a45050505050565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612b735760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610816565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006546000908190620f424090612bec90600160801b900462ffffff16826137b8565b612bfb9062ffffff16856137d4565b612c0591906137f3565b9150612c118284613671565b9050915091565b600454612c2590836135c1565b83608001511015612c635760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b806001600160a01b031683606001516001600160a01b031603612cb35760405162461bcd60e51b815260206004820152600860248201526711930e914b4c8c0d60c21b6044820152606401610816565b608083015160025460608501516040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015612d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613586565b1015612d635760405162461bcd60e51b815260206004820152600860248201526723261d229699181b60c11b6044820152606401610816565b60608301516080840151600254610a5a926001600160a01b03909116913090612f51565b60608101516080820151600254611037926001600160a01b0390911691612afb565b6000612dbe836001600160a01b038416612fdb565b9392505050565b80471015612e155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610816565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e62576040519150601f19603f3d011682016040523d82523d6000602084013e612e67565b606091505b5050905080610a5a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610816565b60606000612dbe8361302a565b6000612187825490565b6000612dbe8383613086565b6000818360200151101580612dbe5750602083015183518391612f23916135c1565b10158015612dbe575060055460608401516001600160801b03600160801b9092048216911610905092915050565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080612fd45760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610816565b5050505050565b600081815260018301602052604081205461302257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612187565b506000612187565b60608160000180548060200260200160405190810160405280929190818152602001828054801561307a57602002820191906000526020600020905b815481526020019060010190808311613066575b50505050509050919050565b600082600001828154811061309d5761309d61354e565b9060005260206000200154905092915050565b80356001600160801b03811681146130c757600080fd5b919050565b6000602082840312156130de57600080fd5b612dbe826130b0565b6001600160a01b038116811461103757600080fd5b80356130c7816130e7565b60006020828403121561311957600080fd5b8135612dbe816130e7565b60006020828403121561313657600080fd5b813562ffffff81168114612dbe57600080fd5b60006020828403121561315b57600080fd5b81358015158114612dbe57600080fd5b60008060006060848603121561318057600080fd5b833561318b816130e7565b9250613199602085016130b0565b915060408401356131a9816130e7565b809150509250925092565b600080602083850312156131c757600080fd5b823567ffffffffffffffff808211156131df57600080fd5b818501915085601f8301126131f357600080fd5b81358181111561320257600080fd5b8660208260051b850101111561321757600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052602160045260246000fd5b60006060820190506001600160801b038084511683528060208501511660208401525060408301516003811061328557634e487b7160e01b600052602160045260246000fd5b8060408401525092915050565b600080604083850312156132a557600080fd5b82356132b0816130e7565b915060208301356132c0816130e7565b809150509250929050565b6000806000606084860312156132e057600080fd5b6132e9846130b0565b92506020840135613199816130e7565b803561ffff811681146130c757600080fd5b60006020828403121561331d57600080fd5b612dbe826132f9565b60006020828403121561333857600080fd5b5035919050565b600060a0828403121561335157600080fd5b50919050565b6000806040838503121561336a57600080fd5b6132b0836130b0565b821515815260006020604081840152835180604085015260005b818110156133a95785810183015185820160600152820161338d565b818111156133bb576000606083870101525b50601f01601f191692909201606001949350505050565b600081518084526020808501945080840160005b8381101561340b5781516001600160a01b0316875295820195908201906001016133e6565b509495945050505050565b602081526000612dbe60208301846133d2565b6000806040838503121561343c57600080fd5b613445836132f9565b9150613453602084016130b0565b90509250929050565b821515815260406020820152600061347760408301846133d2565b949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260089082015267464c3a452d33303160c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b0380831681851680830382111561350e5761350e6134d6565b01949350505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526008908201526723261d229699981960c11b604082015260600190565b60006020828403121561359857600080fd5b5051919050565b60208082526008908201526711930e914b4c4c0d60c21b604082015260600190565b600082198211156135d4576135d46134d6565b500190565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135613604816130e7565b61360e81836135d9565b50602082013561361d816130e7565b61362a81600184016135d9565b506040820135613639816130e7565b61364681600284016135d9565b506060820135613655816130e7565b61366281600384016135d9565b50608082013560048201555050565b600082821015613683576136836134d6565b500390565b634e487b7160e01b600052604160045260246000fd5b600060a082840312156136b057600080fd5b60405160a0810181811067ffffffffffffffff821117156136e157634e487b7160e01b600052604160045260246000fd5b60405282356136ef816130e7565b815260208301356136ff816130e7565b6020820152613710604084016130fc565b6040820152613721606084016130fc565b6060820152608083013560808201528091505092915050565b60006001600160801b038381169083168181101561375a5761375a6134d6565b039392505050565b600061ffff808316818103613779576137796134d6565b6001019392505050565b600060018201613795576137956134d6565b5060010190565b60006001600160801b03808316818103613779576137796134d6565b600062ffffff8381169083168181101561375a5761375a6134d6565b60008160001904831182151516156137ee576137ee6134d6565b500290565b60008261381057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c634300080f000a68656c6c6f000000000000000000000000000000000000000000000000000000", - "nonce": "0x0", - "accessList": [] - } - } - ], - "receipts": [], - "libraries": [], - "pending": [], - "path": "broadcast/PreProxyDeploy.s.sol/137/run-latest.json", - "returns": {}, - "timestamp": 1659050856 -} \ No newline at end of file diff --git a/broadcast/PreProxyDeploy.s.sol/137/run-1659050979.json b/broadcast/PreProxyDeploy.s.sol/137/run-1659050979.json deleted file mode 100644 index 49ac423..0000000 --- a/broadcast/PreProxyDeploy.s.sol/137/run-1659050979.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "transactions": [ - { - "hash": null, - "type": "CREATE", - "contractAddress": "0xc71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "tx": { - "type": "0x02", - "from": "0x1ba0f96bf6b26df11a58553c6db9a0314938cf70", - "gas": "0x89157c", - "value": "0x0", - "data": "0x608060405234801561001057600080fd5b5060405161797438038061797483398101604081905261002f91610440565b7fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80546001600160a01b031990811673b3f5503f93d5ef84b06993a1975b9d21b962892f9081179092557f2bda5adf664a0c31bf9134cad8d937629fcee52b9cefd545e0c716efa1202a518054821673527a819db1eb0e34426297b03bae11f2f8b3a19e1790557fa8c57e13d49dd6e2870c5d5f809130d4d18970dd320604381d96a20d80a714f480548216831790557fa3e343505a37a5f41b372e3722e1aa14239f74a613d1511ba6a638cac5ed8589805482169092179091557fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e08054821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790557f0cb0be258cd4e0f89ef5514ec447dd8846b0cf865c7d0d8ea82ff58a1eae81a180548216730d500b1d8e8ef31e21c99d1db9a6444d3adf12701790557f2af04f721798314fc694a46b3db9f8005ee5d928ceb0c93e438e01e3ac240ed480548216739c3c9283d3e44854697cd22d3faa240cfb0328899081179091557f7a1c85dbd356d1ede4c0e23eb93fed1980e3ae3583babceeae9b100fd153ad6e8054909216179055466000908152600160209081526040808320546002909252909120546001600160a01b039081169116806102515760405162461bcd60e51b81526020600482015260066024820152654f286f29707360d01b60448201526064015b60405180910390fd5b6001600160a01b0382166102915760405162461bcd60e51b815260206004820152600760248201526615dc985c1c195960ca1b6044820152606401610248565b61029c8383836102a4565b505050610459565b826040516102b190610433565b8190604051809103906000f59050801580156102d1573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216918217905561032a5760405162461bcd60e51b815260206004820152600a60248201526915dc9bdb99c81a5b9a5d60b21b6044820152606401610248565b6000546040516001600160a01b0390911681527fa89c1a761177532f843f74a1ba026520efa520185852784cc804d057c8b96a5f9060200160405180910390a160005460405163784d200b60e11b81526001600160a01b03848116600483015283811660248301529091169063f09a401690604401600060405180830381600087803b1580156103b957600080fd5b505af11580156103cd573d6000803e3d6000fd5b505060005460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b50505050505050565b6138f58061407f83390190565b60006020828403121561045257600080fd5b5051919050565b613c17806104686000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630e2920441461005c5780637d0464521461008c5780637f79c601146100b55780638c880723146100de57806396ca14b114610110575b600080fd5b60005461006f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61006f61009a3660046102c1565b6002602052600090815260409020546001600160a01b031681565b61006f6100c33660046102c1565b6001602052600090815260409020546001600160a01b031681565b6100f16100ec3660046102c1565b61014a565b604080516001600160a01b039093168352901515602083015201610083565b4660009081526001602090815260408083205460028352928190205481516001600160a01b03918216815293169183019190915201610083565b46600090815260016020908152604080832054600290925282205482916001600160a01b039182169116806101af5760405162461bcd60e51b81526020600482015260066024820152654f286f29707360d01b60448201526064015b60405180910390fd5b6001600160a01b0382166101ef5760405162461bcd60e51b815260206004820152600760248201526615dc985c1c195960ca1b60448201526064016101a6565b60ff60f81b308660405180602001610206906102b4565b601f1982820381018352601f90910116604081905261022891906020016102da565b6040516020818303038152906040528051906020012060405160200161028594939291906001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051601f198184030181529190528051602090910120956001600160a01b0387163b151595509350505050565b6138f58061031683390190565b6000602082840312156102d357600080fd5b5035919050565b6000825160005b818110156102fb57602081860181015185830152016102e1565b8181111561030a576000828501525b50919091019291505056fe6080604052678ac7230489e800006004557001000000000000006c6b935b8bbd400000600555600680546001600160c01b031916730a00c35000000000000000000000002e90edd0001790556000600c553480156200005d57600080fd5b50620000693362000073565b60018055620000c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61382280620000d36000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c8063715018a611610167578063d30c9952116100ce578063e70abe9211610087578063e70abe921461077c578063e9e0953f1461078f578063f09a40161461079d578063f2fde38b146107b0578063fa2e750b146107c3578063fe67a54b146107e457600080fd5b8063d30c995214610708578063db4b9dc01461071b578063db9f60ff1461072e578063dde8119f14610741578063e004f5de14610749578063e3d2400f1461075c57600080fd5b806398427177116101205780639842717714610686578063afb8327114610699578063b72ccf37146106ac578063c15ffd87146106d6578063c6e11004146106e9578063cf5303cf146106f257600080fd5b8063715018a6146105fc57806374ecaa7d146106045780637d495139146106175780637ffaa99c1461062a5780638da5cb5b1461064e5780639035b0831461067357600080fd5b80633963510b1161020b57806359a5ea75116101c457806359a5ea751461058a5780635c1a928a146105a45780635c7e9db8146105b757806360448443146105ca578063652eba9b146105e15780636b64c769146105f457600080fd5b80633963510b146104175780633bd950731461042a5780633d621e4c1461043d5780633e53ec7314610468578063501ee12614610536578063559202d51461054957600080fd5b8063219ee3941161025d578063219ee3941461037b57806326371b841461038e5780632897c4f3146103a15780632932b55e146103b457806330ccebb5146103c75780633535228c146103e757600080fd5b806303fddc0d1461029a57806306c7a236146102af57806308fe95b51461032d5780630aa0ce5c146103555780630b58e6db14610368575b600080fd5b6102ad6102a83660046130cc565b6107ec565b005b6103046102bd366004613107565b604080518082018252600080825260209182018190526001600160a01b039384168152600b8252829020825180840190935280548352600101549092169181019190915290565b60408051825181526020928301516001600160a01b031692810192909252015b60405180910390f35b60065461034290600160981b900461ffff1681565b60405161ffff9091168152602001610324565b6102ad610363366004613124565b610874565b6102ad6103763660046130cc565b61095c565b6102ad610389366004613149565b6109d4565b6102ad61039c36600461316b565b610a1c565b6102ad6103af366004613107565b610a5f565b6102ad6103c23660046131b4565b610b96565b6103da6103d5366004613107565b610d27565b604051610324919061323f565b6103fa6103f5366004613292565b610dc6565b604080519283526001600160801b03909116602083015201610324565b6102ad610425366004613107565b610e81565b6102ad610438366004613107565b611004565b600554610450906001600160801b031681565b6040516001600160801b039091168152602001610324565b6104f6610476366004613107565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600a6020908152604091829020825160808101845281548152600182015492810192909252600201546001600160801b0380821693830193909352600160801b9004909116606082015290565b604080518251815260208084015190820152828201516001600160801b039081169282019290925260609283015190911691810191909152608001610324565b6102ad610544366004613107565b61103a565b61055c6105573660046132cb565b611119565b6040805193151584526001600160a01b0390921660208401526001600160801b031690820152606001610324565b60055461045090600160801b90046001600160801b031681565b6102ad6105b236600461330b565b6111d5565b6102ad6105c5366004613107565b611252565b6105d3600c5481565b604051908152602001610324565b6102ad6105ef366004613107565b6112ca565b6102ad6113e5565b6102ad61148e565b6102ad610612366004613326565b6114c4565b6102ad61062536600461333f565b611523565b60065461063e90600160a81b900460ff1681565b6040519015158152602001610324565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610324565b6102ad610681366004613357565b611cf7565b61055c610694366004613292565b611d4c565b6102ad6106a7366004613326565b611d70565b6006546106c290600160801b900462ffffff1681565b60405162ffffff9091168152602001610324565b6102ad6106e4366004613107565b611e43565b6105d360045481565b6106fa611e73565b604051610324929190613373565b6102ad610716366004613107565b611f81565b600654610450906001600160801b031681565b6102ad61073c366004613149565b6120c5565b61045061213c565b60025461065b906001600160a01b031681565b61076f61076a3660046130cc565b612163565b6040516103249190613416565b60035461065b906001600160a01b031681565b6104506001600160801b0381565b6102ad6107ab366004613292565b61218d565b6102ad6107be366004613107565b612224565b6107d66107d1366004613429565b6122bc565b60405161032492919061345c565b61063e61246f565b6000546001600160a01b0316331461081f5760405162461bcd60e51b81526004016108169061347f565b60405180910390fd5b600680546001600160801b0319166001600160801b0383169081179091556040519081527f256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c906020015b60405180910390a150565b6000546001600160a01b0316331461089e5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156108c85760405162461bcd60e51b8152600401610816906134b4565b620f42408162ffffff161061090a5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313360c01b6044820152606401610816565b6006805462ffffff60801b1916600160801b62ffffff8416908102919091179091556040519081527f255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda90602001610869565b6000546001600160a01b031633146109865760405162461bcd60e51b81526004016108169061347f565b600580546001600160801b0319166001600160801b0383169081179091556040519081527f516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f718027290602001610869565b6000546001600160a01b031633146109fe5760405162461bcd60e51b81526004016108169061347f565b60068054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016108169061347f565b610a4f836125ba565b610a5a83838361279a565b505050565b6000546001600160a01b03163314610a895760405162461bcd60e51b81526004016108169061347f565b6001600160a01b03811660009081526007602052604090206002600182015460ff166002811115610abc57610abc613229565b14610af45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b600654600090600160a81b900460ff16610b2057600554600160801b90046001600160801b0316610b3e565b600554610b3e90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f6b4dbdf55669f6c01188b405d3882517d953fb610502150c0720131e879f876e90600090a3505050565b600260015403610bb85760405162461bcd60e51b815260040161081690613517565b60026001556003546001600160a01b03163314610c025760405162461bcd60e51b815260206004820152600860248201526723261d229698981b60c11b6044820152606401610816565b600654600160b81b900460ff16158015610c265750600654600160b01b900460ff16155b610c5d5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6006546001600160801b03163a1115610ca35760405162461bcd60e51b8152602060048201526008602482015267464c3a452d33303760c01b6044820152606401610816565b8060005b81811015610d1d576000848483818110610cc357610cc361354e565b9050602002016020810190610cd89190613107565b6001600160a01b031614610d1557610d15848483818110610cfb57610cfb61354e565b9050602002016020810190610d109190613107565b6128d1565b600101610ca7565b5050600180555050565b610d4860408051606081018252600080825260208201819052909182015290565b6001600160a01b038216600090815260076020908152604091829020825160608101845281546001600160801b038082168352600160801b90910416928101929092526001810154919290919083019060ff166002811115610dac57610dac613229565b6002811115610dbd57610dbd613229565b90525092915050565b6006546000908190600160a81b900460ff16610df45760405162461bcd60e51b815260040161081690613564565b5050600554600160801b90046001600160801b031660008181526008602090815260408083206001600160a01b0396871684528252808320948616835293815290839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093526003830154909316606084015260049091015460809092018290529091565b6000546001600160a01b03163314610eab5760405162461bcd60e51b81526004016108169061347f565b600260015403610ecd5760405162461bcd60e51b815260040161081690613517565b60026001819055546001600160a01b0390811690821603610f1b5760405162461bcd60e51b815260206004820152600860248201526723261d229698981960c11b6044820152606401610816565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190613586565b90508015610ffb57610fb6610fa56000546001600160a01b031690565b6001600160a01b0384169083612afb565b6000546040518281526001600160a01b039091169030907f6c9d637297625e945b296ff73a71fcfbd0a9e062652b6491a921c4c60194176b9060200160405180910390a35b50506001805550565b6000546001600160a01b0316331461102e5760405162461bcd60e51b81526004016108169061347f565b611037816125ba565b50565b6000546001600160a01b031633146110645760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff161561108e5760405162461bcd60e51b8152600401610816906134b4565b6001600160a01b0381166110cf5760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3030360c41b6044820152606401610816565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc990600090a250565b600554600090819081906001600160801b03600160801b9091048116908716106111705760405162461bcd60e51b8152602060048201526008602482015267464c2d453a32303160c01b6044820152606401610816565b6001600160801b03861660009081526008602090815260408083206001600160a01b03808a1685529083528184208882168552909252909120600201541680156111c2576001935091508590506111cc565b6000935091508590505b93509350939050565b6000546001600160a01b031633146111ff5760405162461bcd60e51b81526004016108169061347f565b6006805461ffff60981b1916600160981b61ffff8481168202929092179283905560405192041681527ff20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e4890602001610869565b6000546001600160a01b0316331461127c5760405162461bcd60e51b81526004016108169061347f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b455090602001610869565b6000546001600160a01b031633146112f45760405162461bcd60e51b81526004016108169061347f565b6001600160a01b038116600090815260076020526040902060018082015460ff16600281111561132657611326613229565b146113435760405162461bcd60e51b81526004016108169061359f565b600654600090600160a81b900460ff1661136f57600554600160801b90046001600160801b031661138d565b60055461138d90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f50b47e81a29bef5bc0c09d99b7ac8fc76d78e6b3c3590301827bd4b67bc8840990600090a3505050565b6000546001600160a01b0316331461140f5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156114395760405162461bcd60e51b8152600401610816906134b4565b60068054600160a81b60ff60a81b19909116179055600554604051600160801b9091046001600160801b0316907f38b040053f48d9e3c983bb3a552b8323820ff833ceb2534f3099c195b105cc6c90600090a2565b6000546001600160a01b031633146114b85760405162461bcd60e51b81526004016108169061347f565b6114c26000612b79565b565b6000546001600160a01b031633146114ee5760405162461bcd60e51b81526004016108169061347f565b60048190556040518181527f7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a690602001610869565b600654600160a81b900460ff1661154c5760405162461bcd60e51b815260040161081690613564565b600654600160b01b900460ff16156115915760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6002600154036115b35760405162461bcd60e51b815260040161081690613517565b60026001556115c86080820160608301613107565b6001600160a01b0316336001600160a01b0316146116135760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303360c01b6044820152606401610816565b60006007816116256020850185613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561168657611686613229565b600281111561169757611697613229565b905250905060006007816116b16040860160208701613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561171257611712613229565b600281111561172357611723613229565b905250905060018260400151600281111561174057611740613229565b1461175d5760405162461bcd60e51b81526004016108169061359f565b60028160400151600281111561177557611775613229565b146117ad5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b60055460208301516001600160801b03600160801b90920482169116116118015760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303960c01b6044820152606401610816565b60055460208201516001600160801b03600160801b90920482169116116118555760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3231360c41b6044820152606401610816565b60055482516001600160801b03600160801b9092048216911611156118a75760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313160c01b6044820152606401610816565b60055481516001600160801b03600160801b9092048216911611156118f95760405162461bcd60e51b815260206004820152600860248201526723261d229699189960c11b6044820152606401610816565b600554600160801b90046001600160801b03166000908152600860209081526040822090829061192b90870187613107565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906119609190613107565b6001600160a01b03908116825260208083019390935260409182016000908120835160a0810185528154841681526001820154841681870152600282015484169481019490945260038101549092166060840152600490910154608083015290925090600a9082906119d490880188613107565b6001600160a01b0316815260208101919091526040016000206005546002820154919250600160801b918290046001600160801b03908116929091041614801590611a1f5750805415155b15611a44578054600182018054600090611a3a9084906135c1565b9091555050600081555b600554600160801b90046001600160801b03166000908152600860209081526040822087929091611a7790840184613107565b6001600160a01b03166001600160a01b031681526020019081526020016000206000876020016020810190611aac9190613107565b6001600160a01b031681526020810191909152604001600020611acf82826135f9565b5050608082015115611b6d57600080611aeb8460800151612bc9565b91509150600080611aff8960800135612bc9565b915091508281600c54611b1291906135c1565b611b1c9190613671565b600c5584548490611b2e9084906135c1565b611b389190613671565b8555611b5b611b4c368b90038b018b61369e565b87608001518860600151612c18565b611b6486612d87565b50505050611c1d565b6005546002820154600160801b918290046001600160801b03908116929091041614611bbb576005546002820180546001600160801b03600160801b93849004811690930292169190911790555b600080611bcb8760800135612bc9565b9150915080600c6000828254611be191906135c1565b9091555050825482908490600090611bfa9084906135c1565b90915550611c1a9050611c123689900389018961369e565b600080612c18565b50505b611c54611c2d6020870187613107565b600554600160801b90046001600160801b0316600090815260096020526040902090612da9565b50600554600160801b90046001600160801b0316611c786040870160208801613107565b6001600160a01b0316611c8e6020880188613107565b6001600160a01b03167fed843d47bb78802ebc13e8996623a126d58b999326562053c253db476fb522fa611cc860608a0160408b01613107565b604080516001600160a01b03909216825260808b013560208301520160405180910390a4505060018055505050565b60013360009081526007602052604090206001015460ff166002811115611d2057611d20613229565b14611d3d5760405162461bcd60e51b81526004016108169061359f565b611d4833838361279a565b5050565b6000806000611d63611d5c61213c565b8686611119565b9250925092509250925092565b6000546001600160a01b03163314611d9a5760405162461bcd60e51b81526004016108169061347f565b600260015403611dbc5760405162461bcd60e51b815260040161081690613517565b6002600155478111611e3c57611ded81611dde6000546001600160a01b031690565b6001600160a01b031690612dc5565b6000546001600160a01b03166001600160a01b03167f90881b74cde864d3a0b48a1be016fa7c3217b5dc2b02f4f65544ff1dfa92196982604051611e3391815260200190565b60405180910390a25b5060018055565b600260015403611e655760405162461bcd60e51b815260040161081690613517565b6002600155611e3c816128d1565b600654600090606090600160b81b900460ff1680611e9a5750600654600160b01b900460ff165b80611eaf57506006546001600160801b03163a115b15611ec95750506040805160208101909152600080825291565b6006546005546000935083918291611f0391600160981b900461ffff16906107d190600190600160801b90046001600160801b031661373a565b915091508115611f6557604051600194506314995aaf60e11b90611f2b908390602401613416565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152939492505050565b6000604051806020016040528060008152509350935050509091565b6000546001600160a01b03163314611fab5760405162461bcd60e51b81526004016108169061347f565b600654600090600160a81b900460ff16611fd757600554600160801b90046001600160801b0316611ff5565b600554611ff590600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600290526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561207b5761207b613229565b0217905550506040516001600160801b03831691506001600160a01b038416907f8bbd4ebefde66f702715e863992cd517982ed361339dc6b787ed8b397213fc4b90600090a35050565b6000546001600160a01b031633146120ef5760405162461bcd60e51b81526004016108169061347f565b60068054821515600160b01b0260ff60b01b199091161790556040517fa9bfed3d98385b3777389e321dbde773cf7d335fa604fefbae3dca93564f55869061086990831515815260200190565b60055460009061215e90600190600160801b90046001600160801b031661373a565b905090565b6001600160801b038116600090815260096020526040902060609061218790612ede565b92915050565b6000546001600160a01b031633146121b75760405162461bcd60e51b81526004016108169061347f565b6121c08261103a565b6121c981611252565b600580546001600160801b0316600160801b1790556121ef678ac7230489e800006114c4565b612201686c6b935b8bbd40000061095c565b61220f642e90edd0006107ec565b61221a61c350610874565b611d48600a6111d5565b6000546001600160a01b0316331461224e5760405162461bcd60e51b81526004016108169061347f565b6001600160a01b0381166122b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610816565b61103781612b79565b600060608361ffff1667ffffffffffffffff8111156122dd576122dd613688565b604051908082528060200260200182016040528015612306578160200160208202803683370190505b506001600160801b03841660009081526009602052604081209192508061232c83612eeb565b905060005b8181101561245c5760006123458583612ef5565b6001600160a01b0381166000818152600a602090815260408083208151608081018352815481526001820154818501526002909101546001600160801b0380821683850152600160801b90910481166060830152948452600b909252822054600554949550909391929190911610156123d6576001600160a01b0383166000908152600b60205260409020546123e3565b6005546001600160801b03165b90506123ef8282612f01565b1561242f5782888761ffff168151811061240b5761240b61354e565b6001600160a01b039092166020928302919091019091015261242c86613762565b95505b8a61ffff168661ffff16106124465750505061245c565b505050808061245490613783565b915050612331565b505061ffff161515959194509092505050565b600080546001600160a01b0316331461249a5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff166124c35760405162461bcd60e51b815260040161081690613564565b6002600154036124e55760405162461bcd60e51b815260040161081690613517565b60026001556006805460ff60a81b19169055600554604051600160801b9091046001600160801b0316907f95bed6fbde15e474e4ad8a6d2aaa4a759e6e383d33f8de7c945369167ebf849090600090a26005805460109061255590600160801b90046001600160801b031661379c565b91906101000a8154816001600160801b0302191690836001600160801b031602179055506000600c5490506000600c819055506125b061259d6000546001600160a01b031690565b6002546001600160a01b03169083612afb565b5050600180805590565b600654600090600160a81b900460ff166125e657600554600160801b90046001600160801b0316612604565b60055461260490600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600190526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561268a5761268a613229565b021790555050506001600160a01b0382166000908152600a60209081526040808320815160808101835281548152600182015493810193909352600201546001600160801b0380821692840192909252600160801b90041660608201819052909103612756576040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b038a168552600a909352949092209251835590516001830155915191516001600160801b03908116600160801b029216919091176002909101555b6040516001600160801b038316906001600160a01b038516907f197eaede07bece72c8e0d907669d15a7f24328f239a5f1c28ccefc94bfadb35890600090a3505050565b6005546001600160801b0390811690831610156127e45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b6001600160a01b0381161580159061280557506001600160a01b0381163014155b61283c5760405162461bcd60e51b815260206004820152600860248201526723261d229699181960c11b6044820152606401610816565b6040805180820182526001600160801b0384168082526001600160a01b0384811660208085018281528984166000818152600b8452889020965187559051600190960180546001600160a01b031916969094169590951790925584519283529082015290917fec42a6c8c2a3b9298ec01f8c989a25ba1341377172e59d478ac6780a89451634910160405180910390a2505050565b60016001600160a01b03821660009081526007602052604090206001015460ff16600281111561290357612903613229565b146129205760405162461bcd60e51b81526004016108169061359f565b6001600160a01b0381166000908152600a60209081526040918290208251608081018452815481526001808301549382019390935260028201546001600160801b0380821695830195909552600160801b900490931660608401529161298591612f01565b6129bc5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303760c01b6044820152606401610816565b60055460028201546000916001600160801b03600160801b918290048116919092049091161015612a0357600182015482546129f891906135c1565b600083559050612a0a565b5060018101545b60006001838101829055600554600285018054600160801b9092046001600160801b03166001600160801b03199092169190911790556001600160a01b038581168352600b6020908152604093849020845180860190955280548552909201541690820181905284919015612a8157806020015191505b600254612a98906001600160a01b03168385612afb565b600554604080518581526001600160a01b0385811660208301523393600160801b90046001600160801b031692908916917f81c1b0e2611c67c291f656df4c6cd2c85bf255152046acdccd8df8a5ee303456910160405180910390a45050505050565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612b735760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610816565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006546000908190620f424090612bec90600160801b900462ffffff16826137b8565b612bfb9062ffffff16856137d4565b612c0591906137f3565b9150612c118284613671565b9050915091565b600454612c2590836135c1565b83608001511015612c635760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b806001600160a01b031683606001516001600160a01b031603612cb35760405162461bcd60e51b815260206004820152600860248201526711930e914b4c8c0d60c21b6044820152606401610816565b608083015160025460608501516040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015612d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613586565b1015612d635760405162461bcd60e51b815260206004820152600860248201526723261d229699181b60c11b6044820152606401610816565b60608301516080840151600254610a5a926001600160a01b03909116913090612f51565b60608101516080820151600254611037926001600160a01b0390911691612afb565b6000612dbe836001600160a01b038416612fdb565b9392505050565b80471015612e155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610816565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e62576040519150601f19603f3d011682016040523d82523d6000602084013e612e67565b606091505b5050905080610a5a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610816565b60606000612dbe8361302a565b6000612187825490565b6000612dbe8383613086565b6000818360200151101580612dbe5750602083015183518391612f23916135c1565b10158015612dbe575060055460608401516001600160801b03600160801b9092048216911610905092915050565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080612fd45760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610816565b5050505050565b600081815260018301602052604081205461302257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612187565b506000612187565b60608160000180548060200260200160405190810160405280929190818152602001828054801561307a57602002820191906000526020600020905b815481526020019060010190808311613066575b50505050509050919050565b600082600001828154811061309d5761309d61354e565b9060005260206000200154905092915050565b80356001600160801b03811681146130c757600080fd5b919050565b6000602082840312156130de57600080fd5b612dbe826130b0565b6001600160a01b038116811461103757600080fd5b80356130c7816130e7565b60006020828403121561311957600080fd5b8135612dbe816130e7565b60006020828403121561313657600080fd5b813562ffffff81168114612dbe57600080fd5b60006020828403121561315b57600080fd5b81358015158114612dbe57600080fd5b60008060006060848603121561318057600080fd5b833561318b816130e7565b9250613199602085016130b0565b915060408401356131a9816130e7565b809150509250925092565b600080602083850312156131c757600080fd5b823567ffffffffffffffff808211156131df57600080fd5b818501915085601f8301126131f357600080fd5b81358181111561320257600080fd5b8660208260051b850101111561321757600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052602160045260246000fd5b60006060820190506001600160801b038084511683528060208501511660208401525060408301516003811061328557634e487b7160e01b600052602160045260246000fd5b8060408401525092915050565b600080604083850312156132a557600080fd5b82356132b0816130e7565b915060208301356132c0816130e7565b809150509250929050565b6000806000606084860312156132e057600080fd5b6132e9846130b0565b92506020840135613199816130e7565b803561ffff811681146130c757600080fd5b60006020828403121561331d57600080fd5b612dbe826132f9565b60006020828403121561333857600080fd5b5035919050565b600060a0828403121561335157600080fd5b50919050565b6000806040838503121561336a57600080fd5b6132b0836130b0565b821515815260006020604081840152835180604085015260005b818110156133a95785810183015185820160600152820161338d565b818111156133bb576000606083870101525b50601f01601f191692909201606001949350505050565b600081518084526020808501945080840160005b8381101561340b5781516001600160a01b0316875295820195908201906001016133e6565b509495945050505050565b602081526000612dbe60208301846133d2565b6000806040838503121561343c57600080fd5b613445836132f9565b9150613453602084016130b0565b90509250929050565b821515815260406020820152600061347760408301846133d2565b949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260089082015267464c3a452d33303160c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b0380831681851680830382111561350e5761350e6134d6565b01949350505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526008908201526723261d229699981960c11b604082015260600190565b60006020828403121561359857600080fd5b5051919050565b60208082526008908201526711930e914b4c4c0d60c21b604082015260600190565b600082198211156135d4576135d46134d6565b500190565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135613604816130e7565b61360e81836135d9565b50602082013561361d816130e7565b61362a81600184016135d9565b506040820135613639816130e7565b61364681600284016135d9565b506060820135613655816130e7565b61366281600384016135d9565b50608082013560048201555050565b600082821015613683576136836134d6565b500390565b634e487b7160e01b600052604160045260246000fd5b600060a082840312156136b057600080fd5b60405160a0810181811067ffffffffffffffff821117156136e157634e487b7160e01b600052604160045260246000fd5b60405282356136ef816130e7565b815260208301356136ff816130e7565b6020820152613710604084016130fc565b6040820152613721606084016130fc565b6060820152608083013560808201528091505092915050565b60006001600160801b038381169083168181101561375a5761375a6134d6565b039392505050565b600061ffff808316818103613779576137796134d6565b6001019392505050565b600060018201613795576137956134d6565b5060010190565b60006001600160801b03808316818103613779576137796134d6565b600062ffffff8381169083168181101561375a5761375a6134d6565b60008160001904831182151516156137ee576137ee6134d6565b500290565b60008261381057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c634300080f000aa164736f6c634300080f000a6080604052678ac7230489e800006004557001000000000000006c6b935b8bbd400000600555600680546001600160c01b031916730a00c35000000000000000000000002e90edd0001790556000600c553480156200005d57600080fd5b50620000693362000073565b60018055620000c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61382280620000d36000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c8063715018a611610167578063d30c9952116100ce578063e70abe9211610087578063e70abe921461077c578063e9e0953f1461078f578063f09a40161461079d578063f2fde38b146107b0578063fa2e750b146107c3578063fe67a54b146107e457600080fd5b8063d30c995214610708578063db4b9dc01461071b578063db9f60ff1461072e578063dde8119f14610741578063e004f5de14610749578063e3d2400f1461075c57600080fd5b806398427177116101205780639842717714610686578063afb8327114610699578063b72ccf37146106ac578063c15ffd87146106d6578063c6e11004146106e9578063cf5303cf146106f257600080fd5b8063715018a6146105fc57806374ecaa7d146106045780637d495139146106175780637ffaa99c1461062a5780638da5cb5b1461064e5780639035b0831461067357600080fd5b80633963510b1161020b57806359a5ea75116101c457806359a5ea751461058a5780635c1a928a146105a45780635c7e9db8146105b757806360448443146105ca578063652eba9b146105e15780636b64c769146105f457600080fd5b80633963510b146104175780633bd950731461042a5780633d621e4c1461043d5780633e53ec7314610468578063501ee12614610536578063559202d51461054957600080fd5b8063219ee3941161025d578063219ee3941461037b57806326371b841461038e5780632897c4f3146103a15780632932b55e146103b457806330ccebb5146103c75780633535228c146103e757600080fd5b806303fddc0d1461029a57806306c7a236146102af57806308fe95b51461032d5780630aa0ce5c146103555780630b58e6db14610368575b600080fd5b6102ad6102a83660046130cc565b6107ec565b005b6103046102bd366004613107565b604080518082018252600080825260209182018190526001600160a01b039384168152600b8252829020825180840190935280548352600101549092169181019190915290565b60408051825181526020928301516001600160a01b031692810192909252015b60405180910390f35b60065461034290600160981b900461ffff1681565b60405161ffff9091168152602001610324565b6102ad610363366004613124565b610874565b6102ad6103763660046130cc565b61095c565b6102ad610389366004613149565b6109d4565b6102ad61039c36600461316b565b610a1c565b6102ad6103af366004613107565b610a5f565b6102ad6103c23660046131b4565b610b96565b6103da6103d5366004613107565b610d27565b604051610324919061323f565b6103fa6103f5366004613292565b610dc6565b604080519283526001600160801b03909116602083015201610324565b6102ad610425366004613107565b610e81565b6102ad610438366004613107565b611004565b600554610450906001600160801b031681565b6040516001600160801b039091168152602001610324565b6104f6610476366004613107565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600a6020908152604091829020825160808101845281548152600182015492810192909252600201546001600160801b0380821693830193909352600160801b9004909116606082015290565b604080518251815260208084015190820152828201516001600160801b039081169282019290925260609283015190911691810191909152608001610324565b6102ad610544366004613107565b61103a565b61055c6105573660046132cb565b611119565b6040805193151584526001600160a01b0390921660208401526001600160801b031690820152606001610324565b60055461045090600160801b90046001600160801b031681565b6102ad6105b236600461330b565b6111d5565b6102ad6105c5366004613107565b611252565b6105d3600c5481565b604051908152602001610324565b6102ad6105ef366004613107565b6112ca565b6102ad6113e5565b6102ad61148e565b6102ad610612366004613326565b6114c4565b6102ad61062536600461333f565b611523565b60065461063e90600160a81b900460ff1681565b6040519015158152602001610324565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610324565b6102ad610681366004613357565b611cf7565b61055c610694366004613292565b611d4c565b6102ad6106a7366004613326565b611d70565b6006546106c290600160801b900462ffffff1681565b60405162ffffff9091168152602001610324565b6102ad6106e4366004613107565b611e43565b6105d360045481565b6106fa611e73565b604051610324929190613373565b6102ad610716366004613107565b611f81565b600654610450906001600160801b031681565b6102ad61073c366004613149565b6120c5565b61045061213c565b60025461065b906001600160a01b031681565b61076f61076a3660046130cc565b612163565b6040516103249190613416565b60035461065b906001600160a01b031681565b6104506001600160801b0381565b6102ad6107ab366004613292565b61218d565b6102ad6107be366004613107565b612224565b6107d66107d1366004613429565b6122bc565b60405161032492919061345c565b61063e61246f565b6000546001600160a01b0316331461081f5760405162461bcd60e51b81526004016108169061347f565b60405180910390fd5b600680546001600160801b0319166001600160801b0383169081179091556040519081527f256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c906020015b60405180910390a150565b6000546001600160a01b0316331461089e5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156108c85760405162461bcd60e51b8152600401610816906134b4565b620f42408162ffffff161061090a5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313360c01b6044820152606401610816565b6006805462ffffff60801b1916600160801b62ffffff8416908102919091179091556040519081527f255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda90602001610869565b6000546001600160a01b031633146109865760405162461bcd60e51b81526004016108169061347f565b600580546001600160801b0319166001600160801b0383169081179091556040519081527f516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f718027290602001610869565b6000546001600160a01b031633146109fe5760405162461bcd60e51b81526004016108169061347f565b60068054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016108169061347f565b610a4f836125ba565b610a5a83838361279a565b505050565b6000546001600160a01b03163314610a895760405162461bcd60e51b81526004016108169061347f565b6001600160a01b03811660009081526007602052604090206002600182015460ff166002811115610abc57610abc613229565b14610af45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b600654600090600160a81b900460ff16610b2057600554600160801b90046001600160801b0316610b3e565b600554610b3e90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f6b4dbdf55669f6c01188b405d3882517d953fb610502150c0720131e879f876e90600090a3505050565b600260015403610bb85760405162461bcd60e51b815260040161081690613517565b60026001556003546001600160a01b03163314610c025760405162461bcd60e51b815260206004820152600860248201526723261d229698981b60c11b6044820152606401610816565b600654600160b81b900460ff16158015610c265750600654600160b01b900460ff16155b610c5d5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6006546001600160801b03163a1115610ca35760405162461bcd60e51b8152602060048201526008602482015267464c3a452d33303760c01b6044820152606401610816565b8060005b81811015610d1d576000848483818110610cc357610cc361354e565b9050602002016020810190610cd89190613107565b6001600160a01b031614610d1557610d15848483818110610cfb57610cfb61354e565b9050602002016020810190610d109190613107565b6128d1565b600101610ca7565b5050600180555050565b610d4860408051606081018252600080825260208201819052909182015290565b6001600160a01b038216600090815260076020908152604091829020825160608101845281546001600160801b038082168352600160801b90910416928101929092526001810154919290919083019060ff166002811115610dac57610dac613229565b6002811115610dbd57610dbd613229565b90525092915050565b6006546000908190600160a81b900460ff16610df45760405162461bcd60e51b815260040161081690613564565b5050600554600160801b90046001600160801b031660008181526008602090815260408083206001600160a01b0396871684528252808320948616835293815290839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093526003830154909316606084015260049091015460809092018290529091565b6000546001600160a01b03163314610eab5760405162461bcd60e51b81526004016108169061347f565b600260015403610ecd5760405162461bcd60e51b815260040161081690613517565b60026001819055546001600160a01b0390811690821603610f1b5760405162461bcd60e51b815260206004820152600860248201526723261d229698981960c11b6044820152606401610816565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190613586565b90508015610ffb57610fb6610fa56000546001600160a01b031690565b6001600160a01b0384169083612afb565b6000546040518281526001600160a01b039091169030907f6c9d637297625e945b296ff73a71fcfbd0a9e062652b6491a921c4c60194176b9060200160405180910390a35b50506001805550565b6000546001600160a01b0316331461102e5760405162461bcd60e51b81526004016108169061347f565b611037816125ba565b50565b6000546001600160a01b031633146110645760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff161561108e5760405162461bcd60e51b8152600401610816906134b4565b6001600160a01b0381166110cf5760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3030360c41b6044820152606401610816565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc990600090a250565b600554600090819081906001600160801b03600160801b9091048116908716106111705760405162461bcd60e51b8152602060048201526008602482015267464c2d453a32303160c01b6044820152606401610816565b6001600160801b03861660009081526008602090815260408083206001600160a01b03808a1685529083528184208882168552909252909120600201541680156111c2576001935091508590506111cc565b6000935091508590505b93509350939050565b6000546001600160a01b031633146111ff5760405162461bcd60e51b81526004016108169061347f565b6006805461ffff60981b1916600160981b61ffff8481168202929092179283905560405192041681527ff20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e4890602001610869565b6000546001600160a01b0316331461127c5760405162461bcd60e51b81526004016108169061347f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b455090602001610869565b6000546001600160a01b031633146112f45760405162461bcd60e51b81526004016108169061347f565b6001600160a01b038116600090815260076020526040902060018082015460ff16600281111561132657611326613229565b146113435760405162461bcd60e51b81526004016108169061359f565b600654600090600160a81b900460ff1661136f57600554600160801b90046001600160801b031661138d565b60055461138d90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f50b47e81a29bef5bc0c09d99b7ac8fc76d78e6b3c3590301827bd4b67bc8840990600090a3505050565b6000546001600160a01b0316331461140f5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156114395760405162461bcd60e51b8152600401610816906134b4565b60068054600160a81b60ff60a81b19909116179055600554604051600160801b9091046001600160801b0316907f38b040053f48d9e3c983bb3a552b8323820ff833ceb2534f3099c195b105cc6c90600090a2565b6000546001600160a01b031633146114b85760405162461bcd60e51b81526004016108169061347f565b6114c26000612b79565b565b6000546001600160a01b031633146114ee5760405162461bcd60e51b81526004016108169061347f565b60048190556040518181527f7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a690602001610869565b600654600160a81b900460ff1661154c5760405162461bcd60e51b815260040161081690613564565b600654600160b01b900460ff16156115915760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6002600154036115b35760405162461bcd60e51b815260040161081690613517565b60026001556115c86080820160608301613107565b6001600160a01b0316336001600160a01b0316146116135760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303360c01b6044820152606401610816565b60006007816116256020850185613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561168657611686613229565b600281111561169757611697613229565b905250905060006007816116b16040860160208701613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561171257611712613229565b600281111561172357611723613229565b905250905060018260400151600281111561174057611740613229565b1461175d5760405162461bcd60e51b81526004016108169061359f565b60028160400151600281111561177557611775613229565b146117ad5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b60055460208301516001600160801b03600160801b90920482169116116118015760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303960c01b6044820152606401610816565b60055460208201516001600160801b03600160801b90920482169116116118555760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3231360c41b6044820152606401610816565b60055482516001600160801b03600160801b9092048216911611156118a75760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313160c01b6044820152606401610816565b60055481516001600160801b03600160801b9092048216911611156118f95760405162461bcd60e51b815260206004820152600860248201526723261d229699189960c11b6044820152606401610816565b600554600160801b90046001600160801b03166000908152600860209081526040822090829061192b90870187613107565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906119609190613107565b6001600160a01b03908116825260208083019390935260409182016000908120835160a0810185528154841681526001820154841681870152600282015484169481019490945260038101549092166060840152600490910154608083015290925090600a9082906119d490880188613107565b6001600160a01b0316815260208101919091526040016000206005546002820154919250600160801b918290046001600160801b03908116929091041614801590611a1f5750805415155b15611a44578054600182018054600090611a3a9084906135c1565b9091555050600081555b600554600160801b90046001600160801b03166000908152600860209081526040822087929091611a7790840184613107565b6001600160a01b03166001600160a01b031681526020019081526020016000206000876020016020810190611aac9190613107565b6001600160a01b031681526020810191909152604001600020611acf82826135f9565b5050608082015115611b6d57600080611aeb8460800151612bc9565b91509150600080611aff8960800135612bc9565b915091508281600c54611b1291906135c1565b611b1c9190613671565b600c5584548490611b2e9084906135c1565b611b389190613671565b8555611b5b611b4c368b90038b018b61369e565b87608001518860600151612c18565b611b6486612d87565b50505050611c1d565b6005546002820154600160801b918290046001600160801b03908116929091041614611bbb576005546002820180546001600160801b03600160801b93849004811690930292169190911790555b600080611bcb8760800135612bc9565b9150915080600c6000828254611be191906135c1565b9091555050825482908490600090611bfa9084906135c1565b90915550611c1a9050611c123689900389018961369e565b600080612c18565b50505b611c54611c2d6020870187613107565b600554600160801b90046001600160801b0316600090815260096020526040902090612da9565b50600554600160801b90046001600160801b0316611c786040870160208801613107565b6001600160a01b0316611c8e6020880188613107565b6001600160a01b03167fed843d47bb78802ebc13e8996623a126d58b999326562053c253db476fb522fa611cc860608a0160408b01613107565b604080516001600160a01b03909216825260808b013560208301520160405180910390a4505060018055505050565b60013360009081526007602052604090206001015460ff166002811115611d2057611d20613229565b14611d3d5760405162461bcd60e51b81526004016108169061359f565b611d4833838361279a565b5050565b6000806000611d63611d5c61213c565b8686611119565b9250925092509250925092565b6000546001600160a01b03163314611d9a5760405162461bcd60e51b81526004016108169061347f565b600260015403611dbc5760405162461bcd60e51b815260040161081690613517565b6002600155478111611e3c57611ded81611dde6000546001600160a01b031690565b6001600160a01b031690612dc5565b6000546001600160a01b03166001600160a01b03167f90881b74cde864d3a0b48a1be016fa7c3217b5dc2b02f4f65544ff1dfa92196982604051611e3391815260200190565b60405180910390a25b5060018055565b600260015403611e655760405162461bcd60e51b815260040161081690613517565b6002600155611e3c816128d1565b600654600090606090600160b81b900460ff1680611e9a5750600654600160b01b900460ff165b80611eaf57506006546001600160801b03163a115b15611ec95750506040805160208101909152600080825291565b6006546005546000935083918291611f0391600160981b900461ffff16906107d190600190600160801b90046001600160801b031661373a565b915091508115611f6557604051600194506314995aaf60e11b90611f2b908390602401613416565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152939492505050565b6000604051806020016040528060008152509350935050509091565b6000546001600160a01b03163314611fab5760405162461bcd60e51b81526004016108169061347f565b600654600090600160a81b900460ff16611fd757600554600160801b90046001600160801b0316611ff5565b600554611ff590600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600290526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561207b5761207b613229565b0217905550506040516001600160801b03831691506001600160a01b038416907f8bbd4ebefde66f702715e863992cd517982ed361339dc6b787ed8b397213fc4b90600090a35050565b6000546001600160a01b031633146120ef5760405162461bcd60e51b81526004016108169061347f565b60068054821515600160b01b0260ff60b01b199091161790556040517fa9bfed3d98385b3777389e321dbde773cf7d335fa604fefbae3dca93564f55869061086990831515815260200190565b60055460009061215e90600190600160801b90046001600160801b031661373a565b905090565b6001600160801b038116600090815260096020526040902060609061218790612ede565b92915050565b6000546001600160a01b031633146121b75760405162461bcd60e51b81526004016108169061347f565b6121c08261103a565b6121c981611252565b600580546001600160801b0316600160801b1790556121ef678ac7230489e800006114c4565b612201686c6b935b8bbd40000061095c565b61220f642e90edd0006107ec565b61221a61c350610874565b611d48600a6111d5565b6000546001600160a01b0316331461224e5760405162461bcd60e51b81526004016108169061347f565b6001600160a01b0381166122b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610816565b61103781612b79565b600060608361ffff1667ffffffffffffffff8111156122dd576122dd613688565b604051908082528060200260200182016040528015612306578160200160208202803683370190505b506001600160801b03841660009081526009602052604081209192508061232c83612eeb565b905060005b8181101561245c5760006123458583612ef5565b6001600160a01b0381166000818152600a602090815260408083208151608081018352815481526001820154818501526002909101546001600160801b0380821683850152600160801b90910481166060830152948452600b909252822054600554949550909391929190911610156123d6576001600160a01b0383166000908152600b60205260409020546123e3565b6005546001600160801b03165b90506123ef8282612f01565b1561242f5782888761ffff168151811061240b5761240b61354e565b6001600160a01b039092166020928302919091019091015261242c86613762565b95505b8a61ffff168661ffff16106124465750505061245c565b505050808061245490613783565b915050612331565b505061ffff161515959194509092505050565b600080546001600160a01b0316331461249a5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff166124c35760405162461bcd60e51b815260040161081690613564565b6002600154036124e55760405162461bcd60e51b815260040161081690613517565b60026001556006805460ff60a81b19169055600554604051600160801b9091046001600160801b0316907f95bed6fbde15e474e4ad8a6d2aaa4a759e6e383d33f8de7c945369167ebf849090600090a26005805460109061255590600160801b90046001600160801b031661379c565b91906101000a8154816001600160801b0302191690836001600160801b031602179055506000600c5490506000600c819055506125b061259d6000546001600160a01b031690565b6002546001600160a01b03169083612afb565b5050600180805590565b600654600090600160a81b900460ff166125e657600554600160801b90046001600160801b0316612604565b60055461260490600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600190526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561268a5761268a613229565b021790555050506001600160a01b0382166000908152600a60209081526040808320815160808101835281548152600182015493810193909352600201546001600160801b0380821692840192909252600160801b90041660608201819052909103612756576040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b038a168552600a909352949092209251835590516001830155915191516001600160801b03908116600160801b029216919091176002909101555b6040516001600160801b038316906001600160a01b038516907f197eaede07bece72c8e0d907669d15a7f24328f239a5f1c28ccefc94bfadb35890600090a3505050565b6005546001600160801b0390811690831610156127e45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b6001600160a01b0381161580159061280557506001600160a01b0381163014155b61283c5760405162461bcd60e51b815260206004820152600860248201526723261d229699181960c11b6044820152606401610816565b6040805180820182526001600160801b0384168082526001600160a01b0384811660208085018281528984166000818152600b8452889020965187559051600190960180546001600160a01b031916969094169590951790925584519283529082015290917fec42a6c8c2a3b9298ec01f8c989a25ba1341377172e59d478ac6780a89451634910160405180910390a2505050565b60016001600160a01b03821660009081526007602052604090206001015460ff16600281111561290357612903613229565b146129205760405162461bcd60e51b81526004016108169061359f565b6001600160a01b0381166000908152600a60209081526040918290208251608081018452815481526001808301549382019390935260028201546001600160801b0380821695830195909552600160801b900490931660608401529161298591612f01565b6129bc5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303760c01b6044820152606401610816565b60055460028201546000916001600160801b03600160801b918290048116919092049091161015612a0357600182015482546129f891906135c1565b600083559050612a0a565b5060018101545b60006001838101829055600554600285018054600160801b9092046001600160801b03166001600160801b03199092169190911790556001600160a01b038581168352600b6020908152604093849020845180860190955280548552909201541690820181905284919015612a8157806020015191505b600254612a98906001600160a01b03168385612afb565b600554604080518581526001600160a01b0385811660208301523393600160801b90046001600160801b031692908916917f81c1b0e2611c67c291f656df4c6cd2c85bf255152046acdccd8df8a5ee303456910160405180910390a45050505050565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612b735760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610816565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006546000908190620f424090612bec90600160801b900462ffffff16826137b8565b612bfb9062ffffff16856137d4565b612c0591906137f3565b9150612c118284613671565b9050915091565b600454612c2590836135c1565b83608001511015612c635760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b806001600160a01b031683606001516001600160a01b031603612cb35760405162461bcd60e51b815260206004820152600860248201526711930e914b4c8c0d60c21b6044820152606401610816565b608083015160025460608501516040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015612d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613586565b1015612d635760405162461bcd60e51b815260206004820152600860248201526723261d229699181b60c11b6044820152606401610816565b60608301516080840151600254610a5a926001600160a01b03909116913090612f51565b60608101516080820151600254611037926001600160a01b0390911691612afb565b6000612dbe836001600160a01b038416612fdb565b9392505050565b80471015612e155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610816565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e62576040519150601f19603f3d011682016040523d82523d6000602084013e612e67565b606091505b5050905080610a5a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610816565b60606000612dbe8361302a565b6000612187825490565b6000612dbe8383613086565b6000818360200151101580612dbe5750602083015183518391612f23916135c1565b10158015612dbe575060055460608401516001600160801b03600160801b9092048216911610905092915050565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080612fd45760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610816565b5050505050565b600081815260018301602052604081205461302257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612187565b506000612187565b60608160000180548060200260200160405190810160405280929190818152602001828054801561307a57602002820191906000526020600020905b815481526020019060010190808311613066575b50505050509050919050565b600082600001828154811061309d5761309d61354e565b9060005260206000200154905092915050565b80356001600160801b03811681146130c757600080fd5b919050565b6000602082840312156130de57600080fd5b612dbe826130b0565b6001600160a01b038116811461103757600080fd5b80356130c7816130e7565b60006020828403121561311957600080fd5b8135612dbe816130e7565b60006020828403121561313657600080fd5b813562ffffff81168114612dbe57600080fd5b60006020828403121561315b57600080fd5b81358015158114612dbe57600080fd5b60008060006060848603121561318057600080fd5b833561318b816130e7565b9250613199602085016130b0565b915060408401356131a9816130e7565b809150509250925092565b600080602083850312156131c757600080fd5b823567ffffffffffffffff808211156131df57600080fd5b818501915085601f8301126131f357600080fd5b81358181111561320257600080fd5b8660208260051b850101111561321757600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052602160045260246000fd5b60006060820190506001600160801b038084511683528060208501511660208401525060408301516003811061328557634e487b7160e01b600052602160045260246000fd5b8060408401525092915050565b600080604083850312156132a557600080fd5b82356132b0816130e7565b915060208301356132c0816130e7565b809150509250929050565b6000806000606084860312156132e057600080fd5b6132e9846130b0565b92506020840135613199816130e7565b803561ffff811681146130c757600080fd5b60006020828403121561331d57600080fd5b612dbe826132f9565b60006020828403121561333857600080fd5b5035919050565b600060a0828403121561335157600080fd5b50919050565b6000806040838503121561336a57600080fd5b6132b0836130b0565b821515815260006020604081840152835180604085015260005b818110156133a95785810183015185820160600152820161338d565b818111156133bb576000606083870101525b50601f01601f191692909201606001949350505050565b600081518084526020808501945080840160005b8381101561340b5781516001600160a01b0316875295820195908201906001016133e6565b509495945050505050565b602081526000612dbe60208301846133d2565b6000806040838503121561343c57600080fd5b613445836132f9565b9150613453602084016130b0565b90509250929050565b821515815260406020820152600061347760408301846133d2565b949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260089082015267464c3a452d33303160c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b0380831681851680830382111561350e5761350e6134d6565b01949350505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526008908201526723261d229699981960c11b604082015260600190565b60006020828403121561359857600080fd5b5051919050565b60208082526008908201526711930e914b4c4c0d60c21b604082015260600190565b600082198211156135d4576135d46134d6565b500190565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135613604816130e7565b61360e81836135d9565b50602082013561361d816130e7565b61362a81600184016135d9565b506040820135613639816130e7565b61364681600284016135d9565b506060820135613655816130e7565b61366281600384016135d9565b50608082013560048201555050565b600082821015613683576136836134d6565b500390565b634e487b7160e01b600052604160045260246000fd5b600060a082840312156136b057600080fd5b60405160a0810181811067ffffffffffffffff821117156136e157634e487b7160e01b600052604160045260246000fd5b60405282356136ef816130e7565b815260208301356136ff816130e7565b6020820152613710604084016130fc565b6040820152613721606084016130fc565b6060820152608083013560808201528091505092915050565b60006001600160801b038381169083168181101561375a5761375a6134d6565b039392505050565b600061ffff808316818103613779576137796134d6565b6001019392505050565b600060018201613795576137956134d6565b5060010190565b60006001600160801b03808316818103613779576137796134d6565b600062ffffff8381169083168181101561375a5761375a6134d6565b60008160001904831182151516156137ee576137ee6134d6565b500290565b60008261381057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c634300080f000a68656c6c6f000000000000000000000000000000000000000000000000000000", - "nonce": "0x0", - "accessList": [] - } - } - ], - "receipts": [], - "libraries": [], - "pending": [], - "path": "broadcast/PreProxyDeploy.s.sol/137/run-latest.json", - "returns": {}, - "timestamp": 1659050979 -} \ No newline at end of file diff --git a/broadcast/PreProxyDeploy.s.sol/137/run-1659051329.json b/broadcast/PreProxyDeploy.s.sol/137/run-1659051329.json deleted file mode 100644 index a966bdc..0000000 --- a/broadcast/PreProxyDeploy.s.sol/137/run-1659051329.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "transactions": [ - { - "hash": null, - "type": "CREATE", - "contractAddress": "0xc71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "tx": { - "type": "0x02", - "from": "0x1ba0f96bf6b26df11a58553c6db9a0314938cf70", - "gas": "0x89157c", - "value": "0x0", - "data": "0x608060405234801561001057600080fd5b5060405161797438038061797483398101604081905261002f91610440565b7fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80546001600160a01b031990811673b3f5503f93d5ef84b06993a1975b9d21b962892f9081179092557f2bda5adf664a0c31bf9134cad8d937629fcee52b9cefd545e0c716efa1202a518054821673527a819db1eb0e34426297b03bae11f2f8b3a19e1790557fa8c57e13d49dd6e2870c5d5f809130d4d18970dd320604381d96a20d80a714f480548216831790557fa3e343505a37a5f41b372e3722e1aa14239f74a613d1511ba6a638cac5ed8589805482169092179091557fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e08054821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790557f0cb0be258cd4e0f89ef5514ec447dd8846b0cf865c7d0d8ea82ff58a1eae81a180548216730d500b1d8e8ef31e21c99d1db9a6444d3adf12701790557f2af04f721798314fc694a46b3db9f8005ee5d928ceb0c93e438e01e3ac240ed480548216739c3c9283d3e44854697cd22d3faa240cfb0328899081179091557f7a1c85dbd356d1ede4c0e23eb93fed1980e3ae3583babceeae9b100fd153ad6e8054909216179055466000908152600160209081526040808320546002909252909120546001600160a01b039081169116806102515760405162461bcd60e51b81526020600482015260066024820152654f286f29707360d01b60448201526064015b60405180910390fd5b6001600160a01b0382166102915760405162461bcd60e51b815260206004820152600760248201526615dc985c1c195960ca1b6044820152606401610248565b61029c8383836102a4565b505050610459565b826040516102b190610433565b8190604051809103906000f59050801580156102d1573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216918217905561032a5760405162461bcd60e51b815260206004820152600a60248201526915dc9bdb99c81a5b9a5d60b21b6044820152606401610248565b6000546040516001600160a01b0390911681527fa89c1a761177532f843f74a1ba026520efa520185852784cc804d057c8b96a5f9060200160405180910390a160005460405163784d200b60e11b81526001600160a01b03848116600483015283811660248301529091169063f09a401690604401600060405180830381600087803b1580156103b957600080fd5b505af11580156103cd573d6000803e3d6000fd5b505060005460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b50505050505050565b6138f58061407f83390190565b60006020828403121561045257600080fd5b5051919050565b613c17806104686000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630e2920441461005c5780637d0464521461008c5780637f79c601146100b55780638c880723146100de57806396ca14b114610110575b600080fd5b60005461006f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61006f61009a3660046102c1565b6002602052600090815260409020546001600160a01b031681565b61006f6100c33660046102c1565b6001602052600090815260409020546001600160a01b031681565b6100f16100ec3660046102c1565b61014a565b604080516001600160a01b039093168352901515602083015201610083565b4660009081526001602090815260408083205460028352928190205481516001600160a01b03918216815293169183019190915201610083565b46600090815260016020908152604080832054600290925282205482916001600160a01b039182169116806101af5760405162461bcd60e51b81526020600482015260066024820152654f286f29707360d01b60448201526064015b60405180910390fd5b6001600160a01b0382166101ef5760405162461bcd60e51b815260206004820152600760248201526615dc985c1c195960ca1b60448201526064016101a6565b60ff60f81b308660405180602001610206906102b4565b601f1982820381018352601f90910116604081905261022891906020016102da565b6040516020818303038152906040528051906020012060405160200161028594939291906001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051601f198184030181529190528051602090910120956001600160a01b0387163b151595509350505050565b6138f58061031683390190565b6000602082840312156102d357600080fd5b5035919050565b6000825160005b818110156102fb57602081860181015185830152016102e1565b8181111561030a576000828501525b50919091019291505056fe6080604052678ac7230489e800006004557001000000000000006c6b935b8bbd400000600555600680546001600160c01b031916730a00c35000000000000000000000002e90edd0001790556000600c553480156200005d57600080fd5b50620000693362000073565b60018055620000c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61382280620000d36000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c8063715018a611610167578063d30c9952116100ce578063e70abe9211610087578063e70abe921461077c578063e9e0953f1461078f578063f09a40161461079d578063f2fde38b146107b0578063fa2e750b146107c3578063fe67a54b146107e457600080fd5b8063d30c995214610708578063db4b9dc01461071b578063db9f60ff1461072e578063dde8119f14610741578063e004f5de14610749578063e3d2400f1461075c57600080fd5b806398427177116101205780639842717714610686578063afb8327114610699578063b72ccf37146106ac578063c15ffd87146106d6578063c6e11004146106e9578063cf5303cf146106f257600080fd5b8063715018a6146105fc57806374ecaa7d146106045780637d495139146106175780637ffaa99c1461062a5780638da5cb5b1461064e5780639035b0831461067357600080fd5b80633963510b1161020b57806359a5ea75116101c457806359a5ea751461058a5780635c1a928a146105a45780635c7e9db8146105b757806360448443146105ca578063652eba9b146105e15780636b64c769146105f457600080fd5b80633963510b146104175780633bd950731461042a5780633d621e4c1461043d5780633e53ec7314610468578063501ee12614610536578063559202d51461054957600080fd5b8063219ee3941161025d578063219ee3941461037b57806326371b841461038e5780632897c4f3146103a15780632932b55e146103b457806330ccebb5146103c75780633535228c146103e757600080fd5b806303fddc0d1461029a57806306c7a236146102af57806308fe95b51461032d5780630aa0ce5c146103555780630b58e6db14610368575b600080fd5b6102ad6102a83660046130cc565b6107ec565b005b6103046102bd366004613107565b604080518082018252600080825260209182018190526001600160a01b039384168152600b8252829020825180840190935280548352600101549092169181019190915290565b60408051825181526020928301516001600160a01b031692810192909252015b60405180910390f35b60065461034290600160981b900461ffff1681565b60405161ffff9091168152602001610324565b6102ad610363366004613124565b610874565b6102ad6103763660046130cc565b61095c565b6102ad610389366004613149565b6109d4565b6102ad61039c36600461316b565b610a1c565b6102ad6103af366004613107565b610a5f565b6102ad6103c23660046131b4565b610b96565b6103da6103d5366004613107565b610d27565b604051610324919061323f565b6103fa6103f5366004613292565b610dc6565b604080519283526001600160801b03909116602083015201610324565b6102ad610425366004613107565b610e81565b6102ad610438366004613107565b611004565b600554610450906001600160801b031681565b6040516001600160801b039091168152602001610324565b6104f6610476366004613107565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600a6020908152604091829020825160808101845281548152600182015492810192909252600201546001600160801b0380821693830193909352600160801b9004909116606082015290565b604080518251815260208084015190820152828201516001600160801b039081169282019290925260609283015190911691810191909152608001610324565b6102ad610544366004613107565b61103a565b61055c6105573660046132cb565b611119565b6040805193151584526001600160a01b0390921660208401526001600160801b031690820152606001610324565b60055461045090600160801b90046001600160801b031681565b6102ad6105b236600461330b565b6111d5565b6102ad6105c5366004613107565b611252565b6105d3600c5481565b604051908152602001610324565b6102ad6105ef366004613107565b6112ca565b6102ad6113e5565b6102ad61148e565b6102ad610612366004613326565b6114c4565b6102ad61062536600461333f565b611523565b60065461063e90600160a81b900460ff1681565b6040519015158152602001610324565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610324565b6102ad610681366004613357565b611cf7565b61055c610694366004613292565b611d4c565b6102ad6106a7366004613326565b611d70565b6006546106c290600160801b900462ffffff1681565b60405162ffffff9091168152602001610324565b6102ad6106e4366004613107565b611e43565b6105d360045481565b6106fa611e73565b604051610324929190613373565b6102ad610716366004613107565b611f81565b600654610450906001600160801b031681565b6102ad61073c366004613149565b6120c5565b61045061213c565b60025461065b906001600160a01b031681565b61076f61076a3660046130cc565b612163565b6040516103249190613416565b60035461065b906001600160a01b031681565b6104506001600160801b0381565b6102ad6107ab366004613292565b61218d565b6102ad6107be366004613107565b612224565b6107d66107d1366004613429565b6122bc565b60405161032492919061345c565b61063e61246f565b6000546001600160a01b0316331461081f5760405162461bcd60e51b81526004016108169061347f565b60405180910390fd5b600680546001600160801b0319166001600160801b0383169081179091556040519081527f256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c906020015b60405180910390a150565b6000546001600160a01b0316331461089e5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156108c85760405162461bcd60e51b8152600401610816906134b4565b620f42408162ffffff161061090a5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313360c01b6044820152606401610816565b6006805462ffffff60801b1916600160801b62ffffff8416908102919091179091556040519081527f255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda90602001610869565b6000546001600160a01b031633146109865760405162461bcd60e51b81526004016108169061347f565b600580546001600160801b0319166001600160801b0383169081179091556040519081527f516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f718027290602001610869565b6000546001600160a01b031633146109fe5760405162461bcd60e51b81526004016108169061347f565b60068054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016108169061347f565b610a4f836125ba565b610a5a83838361279a565b505050565b6000546001600160a01b03163314610a895760405162461bcd60e51b81526004016108169061347f565b6001600160a01b03811660009081526007602052604090206002600182015460ff166002811115610abc57610abc613229565b14610af45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b600654600090600160a81b900460ff16610b2057600554600160801b90046001600160801b0316610b3e565b600554610b3e90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f6b4dbdf55669f6c01188b405d3882517d953fb610502150c0720131e879f876e90600090a3505050565b600260015403610bb85760405162461bcd60e51b815260040161081690613517565b60026001556003546001600160a01b03163314610c025760405162461bcd60e51b815260206004820152600860248201526723261d229698981b60c11b6044820152606401610816565b600654600160b81b900460ff16158015610c265750600654600160b01b900460ff16155b610c5d5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6006546001600160801b03163a1115610ca35760405162461bcd60e51b8152602060048201526008602482015267464c3a452d33303760c01b6044820152606401610816565b8060005b81811015610d1d576000848483818110610cc357610cc361354e565b9050602002016020810190610cd89190613107565b6001600160a01b031614610d1557610d15848483818110610cfb57610cfb61354e565b9050602002016020810190610d109190613107565b6128d1565b600101610ca7565b5050600180555050565b610d4860408051606081018252600080825260208201819052909182015290565b6001600160a01b038216600090815260076020908152604091829020825160608101845281546001600160801b038082168352600160801b90910416928101929092526001810154919290919083019060ff166002811115610dac57610dac613229565b6002811115610dbd57610dbd613229565b90525092915050565b6006546000908190600160a81b900460ff16610df45760405162461bcd60e51b815260040161081690613564565b5050600554600160801b90046001600160801b031660008181526008602090815260408083206001600160a01b0396871684528252808320948616835293815290839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093526003830154909316606084015260049091015460809092018290529091565b6000546001600160a01b03163314610eab5760405162461bcd60e51b81526004016108169061347f565b600260015403610ecd5760405162461bcd60e51b815260040161081690613517565b60026001819055546001600160a01b0390811690821603610f1b5760405162461bcd60e51b815260206004820152600860248201526723261d229698981960c11b6044820152606401610816565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190613586565b90508015610ffb57610fb6610fa56000546001600160a01b031690565b6001600160a01b0384169083612afb565b6000546040518281526001600160a01b039091169030907f6c9d637297625e945b296ff73a71fcfbd0a9e062652b6491a921c4c60194176b9060200160405180910390a35b50506001805550565b6000546001600160a01b0316331461102e5760405162461bcd60e51b81526004016108169061347f565b611037816125ba565b50565b6000546001600160a01b031633146110645760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff161561108e5760405162461bcd60e51b8152600401610816906134b4565b6001600160a01b0381166110cf5760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3030360c41b6044820152606401610816565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc990600090a250565b600554600090819081906001600160801b03600160801b9091048116908716106111705760405162461bcd60e51b8152602060048201526008602482015267464c2d453a32303160c01b6044820152606401610816565b6001600160801b03861660009081526008602090815260408083206001600160a01b03808a1685529083528184208882168552909252909120600201541680156111c2576001935091508590506111cc565b6000935091508590505b93509350939050565b6000546001600160a01b031633146111ff5760405162461bcd60e51b81526004016108169061347f565b6006805461ffff60981b1916600160981b61ffff8481168202929092179283905560405192041681527ff20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e4890602001610869565b6000546001600160a01b0316331461127c5760405162461bcd60e51b81526004016108169061347f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b455090602001610869565b6000546001600160a01b031633146112f45760405162461bcd60e51b81526004016108169061347f565b6001600160a01b038116600090815260076020526040902060018082015460ff16600281111561132657611326613229565b146113435760405162461bcd60e51b81526004016108169061359f565b600654600090600160a81b900460ff1661136f57600554600160801b90046001600160801b031661138d565b60055461138d90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f50b47e81a29bef5bc0c09d99b7ac8fc76d78e6b3c3590301827bd4b67bc8840990600090a3505050565b6000546001600160a01b0316331461140f5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156114395760405162461bcd60e51b8152600401610816906134b4565b60068054600160a81b60ff60a81b19909116179055600554604051600160801b9091046001600160801b0316907f38b040053f48d9e3c983bb3a552b8323820ff833ceb2534f3099c195b105cc6c90600090a2565b6000546001600160a01b031633146114b85760405162461bcd60e51b81526004016108169061347f565b6114c26000612b79565b565b6000546001600160a01b031633146114ee5760405162461bcd60e51b81526004016108169061347f565b60048190556040518181527f7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a690602001610869565b600654600160a81b900460ff1661154c5760405162461bcd60e51b815260040161081690613564565b600654600160b01b900460ff16156115915760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6002600154036115b35760405162461bcd60e51b815260040161081690613517565b60026001556115c86080820160608301613107565b6001600160a01b0316336001600160a01b0316146116135760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303360c01b6044820152606401610816565b60006007816116256020850185613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561168657611686613229565b600281111561169757611697613229565b905250905060006007816116b16040860160208701613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561171257611712613229565b600281111561172357611723613229565b905250905060018260400151600281111561174057611740613229565b1461175d5760405162461bcd60e51b81526004016108169061359f565b60028160400151600281111561177557611775613229565b146117ad5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b60055460208301516001600160801b03600160801b90920482169116116118015760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303960c01b6044820152606401610816565b60055460208201516001600160801b03600160801b90920482169116116118555760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3231360c41b6044820152606401610816565b60055482516001600160801b03600160801b9092048216911611156118a75760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313160c01b6044820152606401610816565b60055481516001600160801b03600160801b9092048216911611156118f95760405162461bcd60e51b815260206004820152600860248201526723261d229699189960c11b6044820152606401610816565b600554600160801b90046001600160801b03166000908152600860209081526040822090829061192b90870187613107565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906119609190613107565b6001600160a01b03908116825260208083019390935260409182016000908120835160a0810185528154841681526001820154841681870152600282015484169481019490945260038101549092166060840152600490910154608083015290925090600a9082906119d490880188613107565b6001600160a01b0316815260208101919091526040016000206005546002820154919250600160801b918290046001600160801b03908116929091041614801590611a1f5750805415155b15611a44578054600182018054600090611a3a9084906135c1565b9091555050600081555b600554600160801b90046001600160801b03166000908152600860209081526040822087929091611a7790840184613107565b6001600160a01b03166001600160a01b031681526020019081526020016000206000876020016020810190611aac9190613107565b6001600160a01b031681526020810191909152604001600020611acf82826135f9565b5050608082015115611b6d57600080611aeb8460800151612bc9565b91509150600080611aff8960800135612bc9565b915091508281600c54611b1291906135c1565b611b1c9190613671565b600c5584548490611b2e9084906135c1565b611b389190613671565b8555611b5b611b4c368b90038b018b61369e565b87608001518860600151612c18565b611b6486612d87565b50505050611c1d565b6005546002820154600160801b918290046001600160801b03908116929091041614611bbb576005546002820180546001600160801b03600160801b93849004811690930292169190911790555b600080611bcb8760800135612bc9565b9150915080600c6000828254611be191906135c1565b9091555050825482908490600090611bfa9084906135c1565b90915550611c1a9050611c123689900389018961369e565b600080612c18565b50505b611c54611c2d6020870187613107565b600554600160801b90046001600160801b0316600090815260096020526040902090612da9565b50600554600160801b90046001600160801b0316611c786040870160208801613107565b6001600160a01b0316611c8e6020880188613107565b6001600160a01b03167fed843d47bb78802ebc13e8996623a126d58b999326562053c253db476fb522fa611cc860608a0160408b01613107565b604080516001600160a01b03909216825260808b013560208301520160405180910390a4505060018055505050565b60013360009081526007602052604090206001015460ff166002811115611d2057611d20613229565b14611d3d5760405162461bcd60e51b81526004016108169061359f565b611d4833838361279a565b5050565b6000806000611d63611d5c61213c565b8686611119565b9250925092509250925092565b6000546001600160a01b03163314611d9a5760405162461bcd60e51b81526004016108169061347f565b600260015403611dbc5760405162461bcd60e51b815260040161081690613517565b6002600155478111611e3c57611ded81611dde6000546001600160a01b031690565b6001600160a01b031690612dc5565b6000546001600160a01b03166001600160a01b03167f90881b74cde864d3a0b48a1be016fa7c3217b5dc2b02f4f65544ff1dfa92196982604051611e3391815260200190565b60405180910390a25b5060018055565b600260015403611e655760405162461bcd60e51b815260040161081690613517565b6002600155611e3c816128d1565b600654600090606090600160b81b900460ff1680611e9a5750600654600160b01b900460ff165b80611eaf57506006546001600160801b03163a115b15611ec95750506040805160208101909152600080825291565b6006546005546000935083918291611f0391600160981b900461ffff16906107d190600190600160801b90046001600160801b031661373a565b915091508115611f6557604051600194506314995aaf60e11b90611f2b908390602401613416565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152939492505050565b6000604051806020016040528060008152509350935050509091565b6000546001600160a01b03163314611fab5760405162461bcd60e51b81526004016108169061347f565b600654600090600160a81b900460ff16611fd757600554600160801b90046001600160801b0316611ff5565b600554611ff590600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600290526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561207b5761207b613229565b0217905550506040516001600160801b03831691506001600160a01b038416907f8bbd4ebefde66f702715e863992cd517982ed361339dc6b787ed8b397213fc4b90600090a35050565b6000546001600160a01b031633146120ef5760405162461bcd60e51b81526004016108169061347f565b60068054821515600160b01b0260ff60b01b199091161790556040517fa9bfed3d98385b3777389e321dbde773cf7d335fa604fefbae3dca93564f55869061086990831515815260200190565b60055460009061215e90600190600160801b90046001600160801b031661373a565b905090565b6001600160801b038116600090815260096020526040902060609061218790612ede565b92915050565b6000546001600160a01b031633146121b75760405162461bcd60e51b81526004016108169061347f565b6121c08261103a565b6121c981611252565b600580546001600160801b0316600160801b1790556121ef678ac7230489e800006114c4565b612201686c6b935b8bbd40000061095c565b61220f642e90edd0006107ec565b61221a61c350610874565b611d48600a6111d5565b6000546001600160a01b0316331461224e5760405162461bcd60e51b81526004016108169061347f565b6001600160a01b0381166122b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610816565b61103781612b79565b600060608361ffff1667ffffffffffffffff8111156122dd576122dd613688565b604051908082528060200260200182016040528015612306578160200160208202803683370190505b506001600160801b03841660009081526009602052604081209192508061232c83612eeb565b905060005b8181101561245c5760006123458583612ef5565b6001600160a01b0381166000818152600a602090815260408083208151608081018352815481526001820154818501526002909101546001600160801b0380821683850152600160801b90910481166060830152948452600b909252822054600554949550909391929190911610156123d6576001600160a01b0383166000908152600b60205260409020546123e3565b6005546001600160801b03165b90506123ef8282612f01565b1561242f5782888761ffff168151811061240b5761240b61354e565b6001600160a01b039092166020928302919091019091015261242c86613762565b95505b8a61ffff168661ffff16106124465750505061245c565b505050808061245490613783565b915050612331565b505061ffff161515959194509092505050565b600080546001600160a01b0316331461249a5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff166124c35760405162461bcd60e51b815260040161081690613564565b6002600154036124e55760405162461bcd60e51b815260040161081690613517565b60026001556006805460ff60a81b19169055600554604051600160801b9091046001600160801b0316907f95bed6fbde15e474e4ad8a6d2aaa4a759e6e383d33f8de7c945369167ebf849090600090a26005805460109061255590600160801b90046001600160801b031661379c565b91906101000a8154816001600160801b0302191690836001600160801b031602179055506000600c5490506000600c819055506125b061259d6000546001600160a01b031690565b6002546001600160a01b03169083612afb565b5050600180805590565b600654600090600160a81b900460ff166125e657600554600160801b90046001600160801b0316612604565b60055461260490600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600190526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561268a5761268a613229565b021790555050506001600160a01b0382166000908152600a60209081526040808320815160808101835281548152600182015493810193909352600201546001600160801b0380821692840192909252600160801b90041660608201819052909103612756576040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b038a168552600a909352949092209251835590516001830155915191516001600160801b03908116600160801b029216919091176002909101555b6040516001600160801b038316906001600160a01b038516907f197eaede07bece72c8e0d907669d15a7f24328f239a5f1c28ccefc94bfadb35890600090a3505050565b6005546001600160801b0390811690831610156127e45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b6001600160a01b0381161580159061280557506001600160a01b0381163014155b61283c5760405162461bcd60e51b815260206004820152600860248201526723261d229699181960c11b6044820152606401610816565b6040805180820182526001600160801b0384168082526001600160a01b0384811660208085018281528984166000818152600b8452889020965187559051600190960180546001600160a01b031916969094169590951790925584519283529082015290917fec42a6c8c2a3b9298ec01f8c989a25ba1341377172e59d478ac6780a89451634910160405180910390a2505050565b60016001600160a01b03821660009081526007602052604090206001015460ff16600281111561290357612903613229565b146129205760405162461bcd60e51b81526004016108169061359f565b6001600160a01b0381166000908152600a60209081526040918290208251608081018452815481526001808301549382019390935260028201546001600160801b0380821695830195909552600160801b900490931660608401529161298591612f01565b6129bc5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303760c01b6044820152606401610816565b60055460028201546000916001600160801b03600160801b918290048116919092049091161015612a0357600182015482546129f891906135c1565b600083559050612a0a565b5060018101545b60006001838101829055600554600285018054600160801b9092046001600160801b03166001600160801b03199092169190911790556001600160a01b038581168352600b6020908152604093849020845180860190955280548552909201541690820181905284919015612a8157806020015191505b600254612a98906001600160a01b03168385612afb565b600554604080518581526001600160a01b0385811660208301523393600160801b90046001600160801b031692908916917f81c1b0e2611c67c291f656df4c6cd2c85bf255152046acdccd8df8a5ee303456910160405180910390a45050505050565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612b735760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610816565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006546000908190620f424090612bec90600160801b900462ffffff16826137b8565b612bfb9062ffffff16856137d4565b612c0591906137f3565b9150612c118284613671565b9050915091565b600454612c2590836135c1565b83608001511015612c635760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b806001600160a01b031683606001516001600160a01b031603612cb35760405162461bcd60e51b815260206004820152600860248201526711930e914b4c8c0d60c21b6044820152606401610816565b608083015160025460608501516040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015612d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613586565b1015612d635760405162461bcd60e51b815260206004820152600860248201526723261d229699181b60c11b6044820152606401610816565b60608301516080840151600254610a5a926001600160a01b03909116913090612f51565b60608101516080820151600254611037926001600160a01b0390911691612afb565b6000612dbe836001600160a01b038416612fdb565b9392505050565b80471015612e155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610816565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e62576040519150601f19603f3d011682016040523d82523d6000602084013e612e67565b606091505b5050905080610a5a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610816565b60606000612dbe8361302a565b6000612187825490565b6000612dbe8383613086565b6000818360200151101580612dbe5750602083015183518391612f23916135c1565b10158015612dbe575060055460608401516001600160801b03600160801b9092048216911610905092915050565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080612fd45760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610816565b5050505050565b600081815260018301602052604081205461302257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612187565b506000612187565b60608160000180548060200260200160405190810160405280929190818152602001828054801561307a57602002820191906000526020600020905b815481526020019060010190808311613066575b50505050509050919050565b600082600001828154811061309d5761309d61354e565b9060005260206000200154905092915050565b80356001600160801b03811681146130c757600080fd5b919050565b6000602082840312156130de57600080fd5b612dbe826130b0565b6001600160a01b038116811461103757600080fd5b80356130c7816130e7565b60006020828403121561311957600080fd5b8135612dbe816130e7565b60006020828403121561313657600080fd5b813562ffffff81168114612dbe57600080fd5b60006020828403121561315b57600080fd5b81358015158114612dbe57600080fd5b60008060006060848603121561318057600080fd5b833561318b816130e7565b9250613199602085016130b0565b915060408401356131a9816130e7565b809150509250925092565b600080602083850312156131c757600080fd5b823567ffffffffffffffff808211156131df57600080fd5b818501915085601f8301126131f357600080fd5b81358181111561320257600080fd5b8660208260051b850101111561321757600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052602160045260246000fd5b60006060820190506001600160801b038084511683528060208501511660208401525060408301516003811061328557634e487b7160e01b600052602160045260246000fd5b8060408401525092915050565b600080604083850312156132a557600080fd5b82356132b0816130e7565b915060208301356132c0816130e7565b809150509250929050565b6000806000606084860312156132e057600080fd5b6132e9846130b0565b92506020840135613199816130e7565b803561ffff811681146130c757600080fd5b60006020828403121561331d57600080fd5b612dbe826132f9565b60006020828403121561333857600080fd5b5035919050565b600060a0828403121561335157600080fd5b50919050565b6000806040838503121561336a57600080fd5b6132b0836130b0565b821515815260006020604081840152835180604085015260005b818110156133a95785810183015185820160600152820161338d565b818111156133bb576000606083870101525b50601f01601f191692909201606001949350505050565b600081518084526020808501945080840160005b8381101561340b5781516001600160a01b0316875295820195908201906001016133e6565b509495945050505050565b602081526000612dbe60208301846133d2565b6000806040838503121561343c57600080fd5b613445836132f9565b9150613453602084016130b0565b90509250929050565b821515815260406020820152600061347760408301846133d2565b949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260089082015267464c3a452d33303160c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b0380831681851680830382111561350e5761350e6134d6565b01949350505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526008908201526723261d229699981960c11b604082015260600190565b60006020828403121561359857600080fd5b5051919050565b60208082526008908201526711930e914b4c4c0d60c21b604082015260600190565b600082198211156135d4576135d46134d6565b500190565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135613604816130e7565b61360e81836135d9565b50602082013561361d816130e7565b61362a81600184016135d9565b506040820135613639816130e7565b61364681600284016135d9565b506060820135613655816130e7565b61366281600384016135d9565b50608082013560048201555050565b600082821015613683576136836134d6565b500390565b634e487b7160e01b600052604160045260246000fd5b600060a082840312156136b057600080fd5b60405160a0810181811067ffffffffffffffff821117156136e157634e487b7160e01b600052604160045260246000fd5b60405282356136ef816130e7565b815260208301356136ff816130e7565b6020820152613710604084016130fc565b6040820152613721606084016130fc565b6060820152608083013560808201528091505092915050565b60006001600160801b038381169083168181101561375a5761375a6134d6565b039392505050565b600061ffff808316818103613779576137796134d6565b6001019392505050565b600060018201613795576137956134d6565b5060010190565b60006001600160801b03808316818103613779576137796134d6565b600062ffffff8381169083168181101561375a5761375a6134d6565b60008160001904831182151516156137ee576137ee6134d6565b500290565b60008261381057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c634300080f000aa164736f6c634300080f000a6080604052678ac7230489e800006004557001000000000000006c6b935b8bbd400000600555600680546001600160c01b031916730a00c35000000000000000000000002e90edd0001790556000600c553480156200005d57600080fd5b50620000693362000073565b60018055620000c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61382280620000d36000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c8063715018a611610167578063d30c9952116100ce578063e70abe9211610087578063e70abe921461077c578063e9e0953f1461078f578063f09a40161461079d578063f2fde38b146107b0578063fa2e750b146107c3578063fe67a54b146107e457600080fd5b8063d30c995214610708578063db4b9dc01461071b578063db9f60ff1461072e578063dde8119f14610741578063e004f5de14610749578063e3d2400f1461075c57600080fd5b806398427177116101205780639842717714610686578063afb8327114610699578063b72ccf37146106ac578063c15ffd87146106d6578063c6e11004146106e9578063cf5303cf146106f257600080fd5b8063715018a6146105fc57806374ecaa7d146106045780637d495139146106175780637ffaa99c1461062a5780638da5cb5b1461064e5780639035b0831461067357600080fd5b80633963510b1161020b57806359a5ea75116101c457806359a5ea751461058a5780635c1a928a146105a45780635c7e9db8146105b757806360448443146105ca578063652eba9b146105e15780636b64c769146105f457600080fd5b80633963510b146104175780633bd950731461042a5780633d621e4c1461043d5780633e53ec7314610468578063501ee12614610536578063559202d51461054957600080fd5b8063219ee3941161025d578063219ee3941461037b57806326371b841461038e5780632897c4f3146103a15780632932b55e146103b457806330ccebb5146103c75780633535228c146103e757600080fd5b806303fddc0d1461029a57806306c7a236146102af57806308fe95b51461032d5780630aa0ce5c146103555780630b58e6db14610368575b600080fd5b6102ad6102a83660046130cc565b6107ec565b005b6103046102bd366004613107565b604080518082018252600080825260209182018190526001600160a01b039384168152600b8252829020825180840190935280548352600101549092169181019190915290565b60408051825181526020928301516001600160a01b031692810192909252015b60405180910390f35b60065461034290600160981b900461ffff1681565b60405161ffff9091168152602001610324565b6102ad610363366004613124565b610874565b6102ad6103763660046130cc565b61095c565b6102ad610389366004613149565b6109d4565b6102ad61039c36600461316b565b610a1c565b6102ad6103af366004613107565b610a5f565b6102ad6103c23660046131b4565b610b96565b6103da6103d5366004613107565b610d27565b604051610324919061323f565b6103fa6103f5366004613292565b610dc6565b604080519283526001600160801b03909116602083015201610324565b6102ad610425366004613107565b610e81565b6102ad610438366004613107565b611004565b600554610450906001600160801b031681565b6040516001600160801b039091168152602001610324565b6104f6610476366004613107565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600a6020908152604091829020825160808101845281548152600182015492810192909252600201546001600160801b0380821693830193909352600160801b9004909116606082015290565b604080518251815260208084015190820152828201516001600160801b039081169282019290925260609283015190911691810191909152608001610324565b6102ad610544366004613107565b61103a565b61055c6105573660046132cb565b611119565b6040805193151584526001600160a01b0390921660208401526001600160801b031690820152606001610324565b60055461045090600160801b90046001600160801b031681565b6102ad6105b236600461330b565b6111d5565b6102ad6105c5366004613107565b611252565b6105d3600c5481565b604051908152602001610324565b6102ad6105ef366004613107565b6112ca565b6102ad6113e5565b6102ad61148e565b6102ad610612366004613326565b6114c4565b6102ad61062536600461333f565b611523565b60065461063e90600160a81b900460ff1681565b6040519015158152602001610324565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610324565b6102ad610681366004613357565b611cf7565b61055c610694366004613292565b611d4c565b6102ad6106a7366004613326565b611d70565b6006546106c290600160801b900462ffffff1681565b60405162ffffff9091168152602001610324565b6102ad6106e4366004613107565b611e43565b6105d360045481565b6106fa611e73565b604051610324929190613373565b6102ad610716366004613107565b611f81565b600654610450906001600160801b031681565b6102ad61073c366004613149565b6120c5565b61045061213c565b60025461065b906001600160a01b031681565b61076f61076a3660046130cc565b612163565b6040516103249190613416565b60035461065b906001600160a01b031681565b6104506001600160801b0381565b6102ad6107ab366004613292565b61218d565b6102ad6107be366004613107565b612224565b6107d66107d1366004613429565b6122bc565b60405161032492919061345c565b61063e61246f565b6000546001600160a01b0316331461081f5760405162461bcd60e51b81526004016108169061347f565b60405180910390fd5b600680546001600160801b0319166001600160801b0383169081179091556040519081527f256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c906020015b60405180910390a150565b6000546001600160a01b0316331461089e5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156108c85760405162461bcd60e51b8152600401610816906134b4565b620f42408162ffffff161061090a5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313360c01b6044820152606401610816565b6006805462ffffff60801b1916600160801b62ffffff8416908102919091179091556040519081527f255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda90602001610869565b6000546001600160a01b031633146109865760405162461bcd60e51b81526004016108169061347f565b600580546001600160801b0319166001600160801b0383169081179091556040519081527f516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f718027290602001610869565b6000546001600160a01b031633146109fe5760405162461bcd60e51b81526004016108169061347f565b60068054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016108169061347f565b610a4f836125ba565b610a5a83838361279a565b505050565b6000546001600160a01b03163314610a895760405162461bcd60e51b81526004016108169061347f565b6001600160a01b03811660009081526007602052604090206002600182015460ff166002811115610abc57610abc613229565b14610af45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b600654600090600160a81b900460ff16610b2057600554600160801b90046001600160801b0316610b3e565b600554610b3e90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f6b4dbdf55669f6c01188b405d3882517d953fb610502150c0720131e879f876e90600090a3505050565b600260015403610bb85760405162461bcd60e51b815260040161081690613517565b60026001556003546001600160a01b03163314610c025760405162461bcd60e51b815260206004820152600860248201526723261d229698981b60c11b6044820152606401610816565b600654600160b81b900460ff16158015610c265750600654600160b01b900460ff16155b610c5d5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6006546001600160801b03163a1115610ca35760405162461bcd60e51b8152602060048201526008602482015267464c3a452d33303760c01b6044820152606401610816565b8060005b81811015610d1d576000848483818110610cc357610cc361354e565b9050602002016020810190610cd89190613107565b6001600160a01b031614610d1557610d15848483818110610cfb57610cfb61354e565b9050602002016020810190610d109190613107565b6128d1565b600101610ca7565b5050600180555050565b610d4860408051606081018252600080825260208201819052909182015290565b6001600160a01b038216600090815260076020908152604091829020825160608101845281546001600160801b038082168352600160801b90910416928101929092526001810154919290919083019060ff166002811115610dac57610dac613229565b6002811115610dbd57610dbd613229565b90525092915050565b6006546000908190600160a81b900460ff16610df45760405162461bcd60e51b815260040161081690613564565b5050600554600160801b90046001600160801b031660008181526008602090815260408083206001600160a01b0396871684528252808320948616835293815290839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093526003830154909316606084015260049091015460809092018290529091565b6000546001600160a01b03163314610eab5760405162461bcd60e51b81526004016108169061347f565b600260015403610ecd5760405162461bcd60e51b815260040161081690613517565b60026001819055546001600160a01b0390811690821603610f1b5760405162461bcd60e51b815260206004820152600860248201526723261d229698981960c11b6044820152606401610816565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190613586565b90508015610ffb57610fb6610fa56000546001600160a01b031690565b6001600160a01b0384169083612afb565b6000546040518281526001600160a01b039091169030907f6c9d637297625e945b296ff73a71fcfbd0a9e062652b6491a921c4c60194176b9060200160405180910390a35b50506001805550565b6000546001600160a01b0316331461102e5760405162461bcd60e51b81526004016108169061347f565b611037816125ba565b50565b6000546001600160a01b031633146110645760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff161561108e5760405162461bcd60e51b8152600401610816906134b4565b6001600160a01b0381166110cf5760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3030360c41b6044820152606401610816565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc990600090a250565b600554600090819081906001600160801b03600160801b9091048116908716106111705760405162461bcd60e51b8152602060048201526008602482015267464c2d453a32303160c01b6044820152606401610816565b6001600160801b03861660009081526008602090815260408083206001600160a01b03808a1685529083528184208882168552909252909120600201541680156111c2576001935091508590506111cc565b6000935091508590505b93509350939050565b6000546001600160a01b031633146111ff5760405162461bcd60e51b81526004016108169061347f565b6006805461ffff60981b1916600160981b61ffff8481168202929092179283905560405192041681527ff20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e4890602001610869565b6000546001600160a01b0316331461127c5760405162461bcd60e51b81526004016108169061347f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b455090602001610869565b6000546001600160a01b031633146112f45760405162461bcd60e51b81526004016108169061347f565b6001600160a01b038116600090815260076020526040902060018082015460ff16600281111561132657611326613229565b146113435760405162461bcd60e51b81526004016108169061359f565b600654600090600160a81b900460ff1661136f57600554600160801b90046001600160801b031661138d565b60055461138d90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f50b47e81a29bef5bc0c09d99b7ac8fc76d78e6b3c3590301827bd4b67bc8840990600090a3505050565b6000546001600160a01b0316331461140f5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156114395760405162461bcd60e51b8152600401610816906134b4565b60068054600160a81b60ff60a81b19909116179055600554604051600160801b9091046001600160801b0316907f38b040053f48d9e3c983bb3a552b8323820ff833ceb2534f3099c195b105cc6c90600090a2565b6000546001600160a01b031633146114b85760405162461bcd60e51b81526004016108169061347f565b6114c26000612b79565b565b6000546001600160a01b031633146114ee5760405162461bcd60e51b81526004016108169061347f565b60048190556040518181527f7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a690602001610869565b600654600160a81b900460ff1661154c5760405162461bcd60e51b815260040161081690613564565b600654600160b01b900460ff16156115915760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6002600154036115b35760405162461bcd60e51b815260040161081690613517565b60026001556115c86080820160608301613107565b6001600160a01b0316336001600160a01b0316146116135760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303360c01b6044820152606401610816565b60006007816116256020850185613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561168657611686613229565b600281111561169757611697613229565b905250905060006007816116b16040860160208701613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561171257611712613229565b600281111561172357611723613229565b905250905060018260400151600281111561174057611740613229565b1461175d5760405162461bcd60e51b81526004016108169061359f565b60028160400151600281111561177557611775613229565b146117ad5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b60055460208301516001600160801b03600160801b90920482169116116118015760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303960c01b6044820152606401610816565b60055460208201516001600160801b03600160801b90920482169116116118555760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3231360c41b6044820152606401610816565b60055482516001600160801b03600160801b9092048216911611156118a75760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313160c01b6044820152606401610816565b60055481516001600160801b03600160801b9092048216911611156118f95760405162461bcd60e51b815260206004820152600860248201526723261d229699189960c11b6044820152606401610816565b600554600160801b90046001600160801b03166000908152600860209081526040822090829061192b90870187613107565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906119609190613107565b6001600160a01b03908116825260208083019390935260409182016000908120835160a0810185528154841681526001820154841681870152600282015484169481019490945260038101549092166060840152600490910154608083015290925090600a9082906119d490880188613107565b6001600160a01b0316815260208101919091526040016000206005546002820154919250600160801b918290046001600160801b03908116929091041614801590611a1f5750805415155b15611a44578054600182018054600090611a3a9084906135c1565b9091555050600081555b600554600160801b90046001600160801b03166000908152600860209081526040822087929091611a7790840184613107565b6001600160a01b03166001600160a01b031681526020019081526020016000206000876020016020810190611aac9190613107565b6001600160a01b031681526020810191909152604001600020611acf82826135f9565b5050608082015115611b6d57600080611aeb8460800151612bc9565b91509150600080611aff8960800135612bc9565b915091508281600c54611b1291906135c1565b611b1c9190613671565b600c5584548490611b2e9084906135c1565b611b389190613671565b8555611b5b611b4c368b90038b018b61369e565b87608001518860600151612c18565b611b6486612d87565b50505050611c1d565b6005546002820154600160801b918290046001600160801b03908116929091041614611bbb576005546002820180546001600160801b03600160801b93849004811690930292169190911790555b600080611bcb8760800135612bc9565b9150915080600c6000828254611be191906135c1565b9091555050825482908490600090611bfa9084906135c1565b90915550611c1a9050611c123689900389018961369e565b600080612c18565b50505b611c54611c2d6020870187613107565b600554600160801b90046001600160801b0316600090815260096020526040902090612da9565b50600554600160801b90046001600160801b0316611c786040870160208801613107565b6001600160a01b0316611c8e6020880188613107565b6001600160a01b03167fed843d47bb78802ebc13e8996623a126d58b999326562053c253db476fb522fa611cc860608a0160408b01613107565b604080516001600160a01b03909216825260808b013560208301520160405180910390a4505060018055505050565b60013360009081526007602052604090206001015460ff166002811115611d2057611d20613229565b14611d3d5760405162461bcd60e51b81526004016108169061359f565b611d4833838361279a565b5050565b6000806000611d63611d5c61213c565b8686611119565b9250925092509250925092565b6000546001600160a01b03163314611d9a5760405162461bcd60e51b81526004016108169061347f565b600260015403611dbc5760405162461bcd60e51b815260040161081690613517565b6002600155478111611e3c57611ded81611dde6000546001600160a01b031690565b6001600160a01b031690612dc5565b6000546001600160a01b03166001600160a01b03167f90881b74cde864d3a0b48a1be016fa7c3217b5dc2b02f4f65544ff1dfa92196982604051611e3391815260200190565b60405180910390a25b5060018055565b600260015403611e655760405162461bcd60e51b815260040161081690613517565b6002600155611e3c816128d1565b600654600090606090600160b81b900460ff1680611e9a5750600654600160b01b900460ff165b80611eaf57506006546001600160801b03163a115b15611ec95750506040805160208101909152600080825291565b6006546005546000935083918291611f0391600160981b900461ffff16906107d190600190600160801b90046001600160801b031661373a565b915091508115611f6557604051600194506314995aaf60e11b90611f2b908390602401613416565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152939492505050565b6000604051806020016040528060008152509350935050509091565b6000546001600160a01b03163314611fab5760405162461bcd60e51b81526004016108169061347f565b600654600090600160a81b900460ff16611fd757600554600160801b90046001600160801b0316611ff5565b600554611ff590600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600290526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561207b5761207b613229565b0217905550506040516001600160801b03831691506001600160a01b038416907f8bbd4ebefde66f702715e863992cd517982ed361339dc6b787ed8b397213fc4b90600090a35050565b6000546001600160a01b031633146120ef5760405162461bcd60e51b81526004016108169061347f565b60068054821515600160b01b0260ff60b01b199091161790556040517fa9bfed3d98385b3777389e321dbde773cf7d335fa604fefbae3dca93564f55869061086990831515815260200190565b60055460009061215e90600190600160801b90046001600160801b031661373a565b905090565b6001600160801b038116600090815260096020526040902060609061218790612ede565b92915050565b6000546001600160a01b031633146121b75760405162461bcd60e51b81526004016108169061347f565b6121c08261103a565b6121c981611252565b600580546001600160801b0316600160801b1790556121ef678ac7230489e800006114c4565b612201686c6b935b8bbd40000061095c565b61220f642e90edd0006107ec565b61221a61c350610874565b611d48600a6111d5565b6000546001600160a01b0316331461224e5760405162461bcd60e51b81526004016108169061347f565b6001600160a01b0381166122b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610816565b61103781612b79565b600060608361ffff1667ffffffffffffffff8111156122dd576122dd613688565b604051908082528060200260200182016040528015612306578160200160208202803683370190505b506001600160801b03841660009081526009602052604081209192508061232c83612eeb565b905060005b8181101561245c5760006123458583612ef5565b6001600160a01b0381166000818152600a602090815260408083208151608081018352815481526001820154818501526002909101546001600160801b0380821683850152600160801b90910481166060830152948452600b909252822054600554949550909391929190911610156123d6576001600160a01b0383166000908152600b60205260409020546123e3565b6005546001600160801b03165b90506123ef8282612f01565b1561242f5782888761ffff168151811061240b5761240b61354e565b6001600160a01b039092166020928302919091019091015261242c86613762565b95505b8a61ffff168661ffff16106124465750505061245c565b505050808061245490613783565b915050612331565b505061ffff161515959194509092505050565b600080546001600160a01b0316331461249a5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff166124c35760405162461bcd60e51b815260040161081690613564565b6002600154036124e55760405162461bcd60e51b815260040161081690613517565b60026001556006805460ff60a81b19169055600554604051600160801b9091046001600160801b0316907f95bed6fbde15e474e4ad8a6d2aaa4a759e6e383d33f8de7c945369167ebf849090600090a26005805460109061255590600160801b90046001600160801b031661379c565b91906101000a8154816001600160801b0302191690836001600160801b031602179055506000600c5490506000600c819055506125b061259d6000546001600160a01b031690565b6002546001600160a01b03169083612afb565b5050600180805590565b600654600090600160a81b900460ff166125e657600554600160801b90046001600160801b0316612604565b60055461260490600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600190526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561268a5761268a613229565b021790555050506001600160a01b0382166000908152600a60209081526040808320815160808101835281548152600182015493810193909352600201546001600160801b0380821692840192909252600160801b90041660608201819052909103612756576040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b038a168552600a909352949092209251835590516001830155915191516001600160801b03908116600160801b029216919091176002909101555b6040516001600160801b038316906001600160a01b038516907f197eaede07bece72c8e0d907669d15a7f24328f239a5f1c28ccefc94bfadb35890600090a3505050565b6005546001600160801b0390811690831610156127e45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b6001600160a01b0381161580159061280557506001600160a01b0381163014155b61283c5760405162461bcd60e51b815260206004820152600860248201526723261d229699181960c11b6044820152606401610816565b6040805180820182526001600160801b0384168082526001600160a01b0384811660208085018281528984166000818152600b8452889020965187559051600190960180546001600160a01b031916969094169590951790925584519283529082015290917fec42a6c8c2a3b9298ec01f8c989a25ba1341377172e59d478ac6780a89451634910160405180910390a2505050565b60016001600160a01b03821660009081526007602052604090206001015460ff16600281111561290357612903613229565b146129205760405162461bcd60e51b81526004016108169061359f565b6001600160a01b0381166000908152600a60209081526040918290208251608081018452815481526001808301549382019390935260028201546001600160801b0380821695830195909552600160801b900490931660608401529161298591612f01565b6129bc5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303760c01b6044820152606401610816565b60055460028201546000916001600160801b03600160801b918290048116919092049091161015612a0357600182015482546129f891906135c1565b600083559050612a0a565b5060018101545b60006001838101829055600554600285018054600160801b9092046001600160801b03166001600160801b03199092169190911790556001600160a01b038581168352600b6020908152604093849020845180860190955280548552909201541690820181905284919015612a8157806020015191505b600254612a98906001600160a01b03168385612afb565b600554604080518581526001600160a01b0385811660208301523393600160801b90046001600160801b031692908916917f81c1b0e2611c67c291f656df4c6cd2c85bf255152046acdccd8df8a5ee303456910160405180910390a45050505050565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612b735760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610816565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006546000908190620f424090612bec90600160801b900462ffffff16826137b8565b612bfb9062ffffff16856137d4565b612c0591906137f3565b9150612c118284613671565b9050915091565b600454612c2590836135c1565b83608001511015612c635760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b806001600160a01b031683606001516001600160a01b031603612cb35760405162461bcd60e51b815260206004820152600860248201526711930e914b4c8c0d60c21b6044820152606401610816565b608083015160025460608501516040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015612d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613586565b1015612d635760405162461bcd60e51b815260206004820152600860248201526723261d229699181b60c11b6044820152606401610816565b60608301516080840151600254610a5a926001600160a01b03909116913090612f51565b60608101516080820151600254611037926001600160a01b0390911691612afb565b6000612dbe836001600160a01b038416612fdb565b9392505050565b80471015612e155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610816565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e62576040519150601f19603f3d011682016040523d82523d6000602084013e612e67565b606091505b5050905080610a5a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610816565b60606000612dbe8361302a565b6000612187825490565b6000612dbe8383613086565b6000818360200151101580612dbe5750602083015183518391612f23916135c1565b10158015612dbe575060055460608401516001600160801b03600160801b9092048216911610905092915050565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080612fd45760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610816565b5050505050565b600081815260018301602052604081205461302257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612187565b506000612187565b60608160000180548060200260200160405190810160405280929190818152602001828054801561307a57602002820191906000526020600020905b815481526020019060010190808311613066575b50505050509050919050565b600082600001828154811061309d5761309d61354e565b9060005260206000200154905092915050565b80356001600160801b03811681146130c757600080fd5b919050565b6000602082840312156130de57600080fd5b612dbe826130b0565b6001600160a01b038116811461103757600080fd5b80356130c7816130e7565b60006020828403121561311957600080fd5b8135612dbe816130e7565b60006020828403121561313657600080fd5b813562ffffff81168114612dbe57600080fd5b60006020828403121561315b57600080fd5b81358015158114612dbe57600080fd5b60008060006060848603121561318057600080fd5b833561318b816130e7565b9250613199602085016130b0565b915060408401356131a9816130e7565b809150509250925092565b600080602083850312156131c757600080fd5b823567ffffffffffffffff808211156131df57600080fd5b818501915085601f8301126131f357600080fd5b81358181111561320257600080fd5b8660208260051b850101111561321757600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052602160045260246000fd5b60006060820190506001600160801b038084511683528060208501511660208401525060408301516003811061328557634e487b7160e01b600052602160045260246000fd5b8060408401525092915050565b600080604083850312156132a557600080fd5b82356132b0816130e7565b915060208301356132c0816130e7565b809150509250929050565b6000806000606084860312156132e057600080fd5b6132e9846130b0565b92506020840135613199816130e7565b803561ffff811681146130c757600080fd5b60006020828403121561331d57600080fd5b612dbe826132f9565b60006020828403121561333857600080fd5b5035919050565b600060a0828403121561335157600080fd5b50919050565b6000806040838503121561336a57600080fd5b6132b0836130b0565b821515815260006020604081840152835180604085015260005b818110156133a95785810183015185820160600152820161338d565b818111156133bb576000606083870101525b50601f01601f191692909201606001949350505050565b600081518084526020808501945080840160005b8381101561340b5781516001600160a01b0316875295820195908201906001016133e6565b509495945050505050565b602081526000612dbe60208301846133d2565b6000806040838503121561343c57600080fd5b613445836132f9565b9150613453602084016130b0565b90509250929050565b821515815260406020820152600061347760408301846133d2565b949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260089082015267464c3a452d33303160c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b0380831681851680830382111561350e5761350e6134d6565b01949350505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526008908201526723261d229699981960c11b604082015260600190565b60006020828403121561359857600080fd5b5051919050565b60208082526008908201526711930e914b4c4c0d60c21b604082015260600190565b600082198211156135d4576135d46134d6565b500190565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135613604816130e7565b61360e81836135d9565b50602082013561361d816130e7565b61362a81600184016135d9565b506040820135613639816130e7565b61364681600284016135d9565b506060820135613655816130e7565b61366281600384016135d9565b50608082013560048201555050565b600082821015613683576136836134d6565b500390565b634e487b7160e01b600052604160045260246000fd5b600060a082840312156136b057600080fd5b60405160a0810181811067ffffffffffffffff821117156136e157634e487b7160e01b600052604160045260246000fd5b60405282356136ef816130e7565b815260208301356136ff816130e7565b6020820152613710604084016130fc565b6040820152613721606084016130fc565b6060820152608083013560808201528091505092915050565b60006001600160801b038381169083168181101561375a5761375a6134d6565b039392505050565b600061ffff808316818103613779576137796134d6565b6001019392505050565b600060018201613795576137956134d6565b5060010190565b60006001600160801b03808316818103613779576137796134d6565b600062ffffff8381169083168181101561375a5761375a6134d6565b60008160001904831182151516156137ee576137ee6134d6565b500290565b60008261381057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c634300080f000a68656c6c6f000000000000000000000000000000000000000000000000000000", - "nonce": "0x0", - "accessList": [] - } - } - ], - "receipts": [], - "libraries": [], - "pending": [], - "path": "broadcast/PreProxyDeploy.s.sol/137/run-latest.json", - "returns": {}, - "timestamp": 1659051329 -} \ No newline at end of file diff --git a/broadcast/PreProxyDeploy.s.sol/137/run-1659051658.json b/broadcast/PreProxyDeploy.s.sol/137/run-1659051658.json deleted file mode 100644 index cde26a4..0000000 --- a/broadcast/PreProxyDeploy.s.sol/137/run-1659051658.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "type": "CREATE", - "contractAddress": "0xc71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "tx": { - "type": "0x02", - "from": "0x1ba0f96bf6b26df11a58553c6db9a0314938cf70", - "gas": "0x89157c", - "value": "0x0", - "data": "0x608060405234801561001057600080fd5b5060405161797438038061797483398101604081905261002f91610440565b7fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80546001600160a01b031990811673b3f5503f93d5ef84b06993a1975b9d21b962892f9081179092557f2bda5adf664a0c31bf9134cad8d937629fcee52b9cefd545e0c716efa1202a518054821673527a819db1eb0e34426297b03bae11f2f8b3a19e1790557fa8c57e13d49dd6e2870c5d5f809130d4d18970dd320604381d96a20d80a714f480548216831790557fa3e343505a37a5f41b372e3722e1aa14239f74a613d1511ba6a638cac5ed8589805482169092179091557fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e08054821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790557f0cb0be258cd4e0f89ef5514ec447dd8846b0cf865c7d0d8ea82ff58a1eae81a180548216730d500b1d8e8ef31e21c99d1db9a6444d3adf12701790557f2af04f721798314fc694a46b3db9f8005ee5d928ceb0c93e438e01e3ac240ed480548216739c3c9283d3e44854697cd22d3faa240cfb0328899081179091557f7a1c85dbd356d1ede4c0e23eb93fed1980e3ae3583babceeae9b100fd153ad6e8054909216179055466000908152600160209081526040808320546002909252909120546001600160a01b039081169116806102515760405162461bcd60e51b81526020600482015260066024820152654f286f29707360d01b60448201526064015b60405180910390fd5b6001600160a01b0382166102915760405162461bcd60e51b815260206004820152600760248201526615dc985c1c195960ca1b6044820152606401610248565b61029c8383836102a4565b505050610459565b826040516102b190610433565b8190604051809103906000f59050801580156102d1573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216918217905561032a5760405162461bcd60e51b815260206004820152600a60248201526915dc9bdb99c81a5b9a5d60b21b6044820152606401610248565b6000546040516001600160a01b0390911681527fa89c1a761177532f843f74a1ba026520efa520185852784cc804d057c8b96a5f9060200160405180910390a160005460405163784d200b60e11b81526001600160a01b03848116600483015283811660248301529091169063f09a401690604401600060405180830381600087803b1580156103b957600080fd5b505af11580156103cd573d6000803e3d6000fd5b505060005460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b50505050505050565b6138f58061407f83390190565b60006020828403121561045257600080fd5b5051919050565b613c17806104686000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630e2920441461005c5780637d0464521461008c5780637f79c601146100b55780638c880723146100de57806396ca14b114610110575b600080fd5b60005461006f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61006f61009a3660046102c1565b6002602052600090815260409020546001600160a01b031681565b61006f6100c33660046102c1565b6001602052600090815260409020546001600160a01b031681565b6100f16100ec3660046102c1565b61014a565b604080516001600160a01b039093168352901515602083015201610083565b4660009081526001602090815260408083205460028352928190205481516001600160a01b03918216815293169183019190915201610083565b46600090815260016020908152604080832054600290925282205482916001600160a01b039182169116806101af5760405162461bcd60e51b81526020600482015260066024820152654f286f29707360d01b60448201526064015b60405180910390fd5b6001600160a01b0382166101ef5760405162461bcd60e51b815260206004820152600760248201526615dc985c1c195960ca1b60448201526064016101a6565b60ff60f81b308660405180602001610206906102b4565b601f1982820381018352601f90910116604081905261022891906020016102da565b6040516020818303038152906040528051906020012060405160200161028594939291906001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051601f198184030181529190528051602090910120956001600160a01b0387163b151595509350505050565b6138f58061031683390190565b6000602082840312156102d357600080fd5b5035919050565b6000825160005b818110156102fb57602081860181015185830152016102e1565b8181111561030a576000828501525b50919091019291505056fe6080604052678ac7230489e800006004557001000000000000006c6b935b8bbd400000600555600680546001600160c01b031916730a00c35000000000000000000000002e90edd0001790556000600c553480156200005d57600080fd5b50620000693362000073565b60018055620000c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61382280620000d36000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c8063715018a611610167578063d30c9952116100ce578063e70abe9211610087578063e70abe921461077c578063e9e0953f1461078f578063f09a40161461079d578063f2fde38b146107b0578063fa2e750b146107c3578063fe67a54b146107e457600080fd5b8063d30c995214610708578063db4b9dc01461071b578063db9f60ff1461072e578063dde8119f14610741578063e004f5de14610749578063e3d2400f1461075c57600080fd5b806398427177116101205780639842717714610686578063afb8327114610699578063b72ccf37146106ac578063c15ffd87146106d6578063c6e11004146106e9578063cf5303cf146106f257600080fd5b8063715018a6146105fc57806374ecaa7d146106045780637d495139146106175780637ffaa99c1461062a5780638da5cb5b1461064e5780639035b0831461067357600080fd5b80633963510b1161020b57806359a5ea75116101c457806359a5ea751461058a5780635c1a928a146105a45780635c7e9db8146105b757806360448443146105ca578063652eba9b146105e15780636b64c769146105f457600080fd5b80633963510b146104175780633bd950731461042a5780633d621e4c1461043d5780633e53ec7314610468578063501ee12614610536578063559202d51461054957600080fd5b8063219ee3941161025d578063219ee3941461037b57806326371b841461038e5780632897c4f3146103a15780632932b55e146103b457806330ccebb5146103c75780633535228c146103e757600080fd5b806303fddc0d1461029a57806306c7a236146102af57806308fe95b51461032d5780630aa0ce5c146103555780630b58e6db14610368575b600080fd5b6102ad6102a83660046130cc565b6107ec565b005b6103046102bd366004613107565b604080518082018252600080825260209182018190526001600160a01b039384168152600b8252829020825180840190935280548352600101549092169181019190915290565b60408051825181526020928301516001600160a01b031692810192909252015b60405180910390f35b60065461034290600160981b900461ffff1681565b60405161ffff9091168152602001610324565b6102ad610363366004613124565b610874565b6102ad6103763660046130cc565b61095c565b6102ad610389366004613149565b6109d4565b6102ad61039c36600461316b565b610a1c565b6102ad6103af366004613107565b610a5f565b6102ad6103c23660046131b4565b610b96565b6103da6103d5366004613107565b610d27565b604051610324919061323f565b6103fa6103f5366004613292565b610dc6565b604080519283526001600160801b03909116602083015201610324565b6102ad610425366004613107565b610e81565b6102ad610438366004613107565b611004565b600554610450906001600160801b031681565b6040516001600160801b039091168152602001610324565b6104f6610476366004613107565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600a6020908152604091829020825160808101845281548152600182015492810192909252600201546001600160801b0380821693830193909352600160801b9004909116606082015290565b604080518251815260208084015190820152828201516001600160801b039081169282019290925260609283015190911691810191909152608001610324565b6102ad610544366004613107565b61103a565b61055c6105573660046132cb565b611119565b6040805193151584526001600160a01b0390921660208401526001600160801b031690820152606001610324565b60055461045090600160801b90046001600160801b031681565b6102ad6105b236600461330b565b6111d5565b6102ad6105c5366004613107565b611252565b6105d3600c5481565b604051908152602001610324565b6102ad6105ef366004613107565b6112ca565b6102ad6113e5565b6102ad61148e565b6102ad610612366004613326565b6114c4565b6102ad61062536600461333f565b611523565b60065461063e90600160a81b900460ff1681565b6040519015158152602001610324565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610324565b6102ad610681366004613357565b611cf7565b61055c610694366004613292565b611d4c565b6102ad6106a7366004613326565b611d70565b6006546106c290600160801b900462ffffff1681565b60405162ffffff9091168152602001610324565b6102ad6106e4366004613107565b611e43565b6105d360045481565b6106fa611e73565b604051610324929190613373565b6102ad610716366004613107565b611f81565b600654610450906001600160801b031681565b6102ad61073c366004613149565b6120c5565b61045061213c565b60025461065b906001600160a01b031681565b61076f61076a3660046130cc565b612163565b6040516103249190613416565b60035461065b906001600160a01b031681565b6104506001600160801b0381565b6102ad6107ab366004613292565b61218d565b6102ad6107be366004613107565b612224565b6107d66107d1366004613429565b6122bc565b60405161032492919061345c565b61063e61246f565b6000546001600160a01b0316331461081f5760405162461bcd60e51b81526004016108169061347f565b60405180910390fd5b600680546001600160801b0319166001600160801b0383169081179091556040519081527f256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c906020015b60405180910390a150565b6000546001600160a01b0316331461089e5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156108c85760405162461bcd60e51b8152600401610816906134b4565b620f42408162ffffff161061090a5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313360c01b6044820152606401610816565b6006805462ffffff60801b1916600160801b62ffffff8416908102919091179091556040519081527f255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda90602001610869565b6000546001600160a01b031633146109865760405162461bcd60e51b81526004016108169061347f565b600580546001600160801b0319166001600160801b0383169081179091556040519081527f516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f718027290602001610869565b6000546001600160a01b031633146109fe5760405162461bcd60e51b81526004016108169061347f565b60068054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016108169061347f565b610a4f836125ba565b610a5a83838361279a565b505050565b6000546001600160a01b03163314610a895760405162461bcd60e51b81526004016108169061347f565b6001600160a01b03811660009081526007602052604090206002600182015460ff166002811115610abc57610abc613229565b14610af45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b600654600090600160a81b900460ff16610b2057600554600160801b90046001600160801b0316610b3e565b600554610b3e90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f6b4dbdf55669f6c01188b405d3882517d953fb610502150c0720131e879f876e90600090a3505050565b600260015403610bb85760405162461bcd60e51b815260040161081690613517565b60026001556003546001600160a01b03163314610c025760405162461bcd60e51b815260206004820152600860248201526723261d229698981b60c11b6044820152606401610816565b600654600160b81b900460ff16158015610c265750600654600160b01b900460ff16155b610c5d5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6006546001600160801b03163a1115610ca35760405162461bcd60e51b8152602060048201526008602482015267464c3a452d33303760c01b6044820152606401610816565b8060005b81811015610d1d576000848483818110610cc357610cc361354e565b9050602002016020810190610cd89190613107565b6001600160a01b031614610d1557610d15848483818110610cfb57610cfb61354e565b9050602002016020810190610d109190613107565b6128d1565b600101610ca7565b5050600180555050565b610d4860408051606081018252600080825260208201819052909182015290565b6001600160a01b038216600090815260076020908152604091829020825160608101845281546001600160801b038082168352600160801b90910416928101929092526001810154919290919083019060ff166002811115610dac57610dac613229565b6002811115610dbd57610dbd613229565b90525092915050565b6006546000908190600160a81b900460ff16610df45760405162461bcd60e51b815260040161081690613564565b5050600554600160801b90046001600160801b031660008181526008602090815260408083206001600160a01b0396871684528252808320948616835293815290839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093526003830154909316606084015260049091015460809092018290529091565b6000546001600160a01b03163314610eab5760405162461bcd60e51b81526004016108169061347f565b600260015403610ecd5760405162461bcd60e51b815260040161081690613517565b60026001819055546001600160a01b0390811690821603610f1b5760405162461bcd60e51b815260206004820152600860248201526723261d229698981960c11b6044820152606401610816565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190613586565b90508015610ffb57610fb6610fa56000546001600160a01b031690565b6001600160a01b0384169083612afb565b6000546040518281526001600160a01b039091169030907f6c9d637297625e945b296ff73a71fcfbd0a9e062652b6491a921c4c60194176b9060200160405180910390a35b50506001805550565b6000546001600160a01b0316331461102e5760405162461bcd60e51b81526004016108169061347f565b611037816125ba565b50565b6000546001600160a01b031633146110645760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff161561108e5760405162461bcd60e51b8152600401610816906134b4565b6001600160a01b0381166110cf5760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3030360c41b6044820152606401610816565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc990600090a250565b600554600090819081906001600160801b03600160801b9091048116908716106111705760405162461bcd60e51b8152602060048201526008602482015267464c2d453a32303160c01b6044820152606401610816565b6001600160801b03861660009081526008602090815260408083206001600160a01b03808a1685529083528184208882168552909252909120600201541680156111c2576001935091508590506111cc565b6000935091508590505b93509350939050565b6000546001600160a01b031633146111ff5760405162461bcd60e51b81526004016108169061347f565b6006805461ffff60981b1916600160981b61ffff8481168202929092179283905560405192041681527ff20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e4890602001610869565b6000546001600160a01b0316331461127c5760405162461bcd60e51b81526004016108169061347f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b455090602001610869565b6000546001600160a01b031633146112f45760405162461bcd60e51b81526004016108169061347f565b6001600160a01b038116600090815260076020526040902060018082015460ff16600281111561132657611326613229565b146113435760405162461bcd60e51b81526004016108169061359f565b600654600090600160a81b900460ff1661136f57600554600160801b90046001600160801b031661138d565b60055461138d90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f50b47e81a29bef5bc0c09d99b7ac8fc76d78e6b3c3590301827bd4b67bc8840990600090a3505050565b6000546001600160a01b0316331461140f5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156114395760405162461bcd60e51b8152600401610816906134b4565b60068054600160a81b60ff60a81b19909116179055600554604051600160801b9091046001600160801b0316907f38b040053f48d9e3c983bb3a552b8323820ff833ceb2534f3099c195b105cc6c90600090a2565b6000546001600160a01b031633146114b85760405162461bcd60e51b81526004016108169061347f565b6114c26000612b79565b565b6000546001600160a01b031633146114ee5760405162461bcd60e51b81526004016108169061347f565b60048190556040518181527f7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a690602001610869565b600654600160a81b900460ff1661154c5760405162461bcd60e51b815260040161081690613564565b600654600160b01b900460ff16156115915760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6002600154036115b35760405162461bcd60e51b815260040161081690613517565b60026001556115c86080820160608301613107565b6001600160a01b0316336001600160a01b0316146116135760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303360c01b6044820152606401610816565b60006007816116256020850185613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561168657611686613229565b600281111561169757611697613229565b905250905060006007816116b16040860160208701613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561171257611712613229565b600281111561172357611723613229565b905250905060018260400151600281111561174057611740613229565b1461175d5760405162461bcd60e51b81526004016108169061359f565b60028160400151600281111561177557611775613229565b146117ad5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b60055460208301516001600160801b03600160801b90920482169116116118015760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303960c01b6044820152606401610816565b60055460208201516001600160801b03600160801b90920482169116116118555760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3231360c41b6044820152606401610816565b60055482516001600160801b03600160801b9092048216911611156118a75760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313160c01b6044820152606401610816565b60055481516001600160801b03600160801b9092048216911611156118f95760405162461bcd60e51b815260206004820152600860248201526723261d229699189960c11b6044820152606401610816565b600554600160801b90046001600160801b03166000908152600860209081526040822090829061192b90870187613107565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906119609190613107565b6001600160a01b03908116825260208083019390935260409182016000908120835160a0810185528154841681526001820154841681870152600282015484169481019490945260038101549092166060840152600490910154608083015290925090600a9082906119d490880188613107565b6001600160a01b0316815260208101919091526040016000206005546002820154919250600160801b918290046001600160801b03908116929091041614801590611a1f5750805415155b15611a44578054600182018054600090611a3a9084906135c1565b9091555050600081555b600554600160801b90046001600160801b03166000908152600860209081526040822087929091611a7790840184613107565b6001600160a01b03166001600160a01b031681526020019081526020016000206000876020016020810190611aac9190613107565b6001600160a01b031681526020810191909152604001600020611acf82826135f9565b5050608082015115611b6d57600080611aeb8460800151612bc9565b91509150600080611aff8960800135612bc9565b915091508281600c54611b1291906135c1565b611b1c9190613671565b600c5584548490611b2e9084906135c1565b611b389190613671565b8555611b5b611b4c368b90038b018b61369e565b87608001518860600151612c18565b611b6486612d87565b50505050611c1d565b6005546002820154600160801b918290046001600160801b03908116929091041614611bbb576005546002820180546001600160801b03600160801b93849004811690930292169190911790555b600080611bcb8760800135612bc9565b9150915080600c6000828254611be191906135c1565b9091555050825482908490600090611bfa9084906135c1565b90915550611c1a9050611c123689900389018961369e565b600080612c18565b50505b611c54611c2d6020870187613107565b600554600160801b90046001600160801b0316600090815260096020526040902090612da9565b50600554600160801b90046001600160801b0316611c786040870160208801613107565b6001600160a01b0316611c8e6020880188613107565b6001600160a01b03167fed843d47bb78802ebc13e8996623a126d58b999326562053c253db476fb522fa611cc860608a0160408b01613107565b604080516001600160a01b03909216825260808b013560208301520160405180910390a4505060018055505050565b60013360009081526007602052604090206001015460ff166002811115611d2057611d20613229565b14611d3d5760405162461bcd60e51b81526004016108169061359f565b611d4833838361279a565b5050565b6000806000611d63611d5c61213c565b8686611119565b9250925092509250925092565b6000546001600160a01b03163314611d9a5760405162461bcd60e51b81526004016108169061347f565b600260015403611dbc5760405162461bcd60e51b815260040161081690613517565b6002600155478111611e3c57611ded81611dde6000546001600160a01b031690565b6001600160a01b031690612dc5565b6000546001600160a01b03166001600160a01b03167f90881b74cde864d3a0b48a1be016fa7c3217b5dc2b02f4f65544ff1dfa92196982604051611e3391815260200190565b60405180910390a25b5060018055565b600260015403611e655760405162461bcd60e51b815260040161081690613517565b6002600155611e3c816128d1565b600654600090606090600160b81b900460ff1680611e9a5750600654600160b01b900460ff165b80611eaf57506006546001600160801b03163a115b15611ec95750506040805160208101909152600080825291565b6006546005546000935083918291611f0391600160981b900461ffff16906107d190600190600160801b90046001600160801b031661373a565b915091508115611f6557604051600194506314995aaf60e11b90611f2b908390602401613416565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152939492505050565b6000604051806020016040528060008152509350935050509091565b6000546001600160a01b03163314611fab5760405162461bcd60e51b81526004016108169061347f565b600654600090600160a81b900460ff16611fd757600554600160801b90046001600160801b0316611ff5565b600554611ff590600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600290526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561207b5761207b613229565b0217905550506040516001600160801b03831691506001600160a01b038416907f8bbd4ebefde66f702715e863992cd517982ed361339dc6b787ed8b397213fc4b90600090a35050565b6000546001600160a01b031633146120ef5760405162461bcd60e51b81526004016108169061347f565b60068054821515600160b01b0260ff60b01b199091161790556040517fa9bfed3d98385b3777389e321dbde773cf7d335fa604fefbae3dca93564f55869061086990831515815260200190565b60055460009061215e90600190600160801b90046001600160801b031661373a565b905090565b6001600160801b038116600090815260096020526040902060609061218790612ede565b92915050565b6000546001600160a01b031633146121b75760405162461bcd60e51b81526004016108169061347f565b6121c08261103a565b6121c981611252565b600580546001600160801b0316600160801b1790556121ef678ac7230489e800006114c4565b612201686c6b935b8bbd40000061095c565b61220f642e90edd0006107ec565b61221a61c350610874565b611d48600a6111d5565b6000546001600160a01b0316331461224e5760405162461bcd60e51b81526004016108169061347f565b6001600160a01b0381166122b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610816565b61103781612b79565b600060608361ffff1667ffffffffffffffff8111156122dd576122dd613688565b604051908082528060200260200182016040528015612306578160200160208202803683370190505b506001600160801b03841660009081526009602052604081209192508061232c83612eeb565b905060005b8181101561245c5760006123458583612ef5565b6001600160a01b0381166000818152600a602090815260408083208151608081018352815481526001820154818501526002909101546001600160801b0380821683850152600160801b90910481166060830152948452600b909252822054600554949550909391929190911610156123d6576001600160a01b0383166000908152600b60205260409020546123e3565b6005546001600160801b03165b90506123ef8282612f01565b1561242f5782888761ffff168151811061240b5761240b61354e565b6001600160a01b039092166020928302919091019091015261242c86613762565b95505b8a61ffff168661ffff16106124465750505061245c565b505050808061245490613783565b915050612331565b505061ffff161515959194509092505050565b600080546001600160a01b0316331461249a5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff166124c35760405162461bcd60e51b815260040161081690613564565b6002600154036124e55760405162461bcd60e51b815260040161081690613517565b60026001556006805460ff60a81b19169055600554604051600160801b9091046001600160801b0316907f95bed6fbde15e474e4ad8a6d2aaa4a759e6e383d33f8de7c945369167ebf849090600090a26005805460109061255590600160801b90046001600160801b031661379c565b91906101000a8154816001600160801b0302191690836001600160801b031602179055506000600c5490506000600c819055506125b061259d6000546001600160a01b031690565b6002546001600160a01b03169083612afb565b5050600180805590565b600654600090600160a81b900460ff166125e657600554600160801b90046001600160801b0316612604565b60055461260490600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600190526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561268a5761268a613229565b021790555050506001600160a01b0382166000908152600a60209081526040808320815160808101835281548152600182015493810193909352600201546001600160801b0380821692840192909252600160801b90041660608201819052909103612756576040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b038a168552600a909352949092209251835590516001830155915191516001600160801b03908116600160801b029216919091176002909101555b6040516001600160801b038316906001600160a01b038516907f197eaede07bece72c8e0d907669d15a7f24328f239a5f1c28ccefc94bfadb35890600090a3505050565b6005546001600160801b0390811690831610156127e45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b6001600160a01b0381161580159061280557506001600160a01b0381163014155b61283c5760405162461bcd60e51b815260206004820152600860248201526723261d229699181960c11b6044820152606401610816565b6040805180820182526001600160801b0384168082526001600160a01b0384811660208085018281528984166000818152600b8452889020965187559051600190960180546001600160a01b031916969094169590951790925584519283529082015290917fec42a6c8c2a3b9298ec01f8c989a25ba1341377172e59d478ac6780a89451634910160405180910390a2505050565b60016001600160a01b03821660009081526007602052604090206001015460ff16600281111561290357612903613229565b146129205760405162461bcd60e51b81526004016108169061359f565b6001600160a01b0381166000908152600a60209081526040918290208251608081018452815481526001808301549382019390935260028201546001600160801b0380821695830195909552600160801b900490931660608401529161298591612f01565b6129bc5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303760c01b6044820152606401610816565b60055460028201546000916001600160801b03600160801b918290048116919092049091161015612a0357600182015482546129f891906135c1565b600083559050612a0a565b5060018101545b60006001838101829055600554600285018054600160801b9092046001600160801b03166001600160801b03199092169190911790556001600160a01b038581168352600b6020908152604093849020845180860190955280548552909201541690820181905284919015612a8157806020015191505b600254612a98906001600160a01b03168385612afb565b600554604080518581526001600160a01b0385811660208301523393600160801b90046001600160801b031692908916917f81c1b0e2611c67c291f656df4c6cd2c85bf255152046acdccd8df8a5ee303456910160405180910390a45050505050565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612b735760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610816565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006546000908190620f424090612bec90600160801b900462ffffff16826137b8565b612bfb9062ffffff16856137d4565b612c0591906137f3565b9150612c118284613671565b9050915091565b600454612c2590836135c1565b83608001511015612c635760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b806001600160a01b031683606001516001600160a01b031603612cb35760405162461bcd60e51b815260206004820152600860248201526711930e914b4c8c0d60c21b6044820152606401610816565b608083015160025460608501516040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015612d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613586565b1015612d635760405162461bcd60e51b815260206004820152600860248201526723261d229699181b60c11b6044820152606401610816565b60608301516080840151600254610a5a926001600160a01b03909116913090612f51565b60608101516080820151600254611037926001600160a01b0390911691612afb565b6000612dbe836001600160a01b038416612fdb565b9392505050565b80471015612e155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610816565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e62576040519150601f19603f3d011682016040523d82523d6000602084013e612e67565b606091505b5050905080610a5a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610816565b60606000612dbe8361302a565b6000612187825490565b6000612dbe8383613086565b6000818360200151101580612dbe5750602083015183518391612f23916135c1565b10158015612dbe575060055460608401516001600160801b03600160801b9092048216911610905092915050565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080612fd45760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610816565b5050505050565b600081815260018301602052604081205461302257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612187565b506000612187565b60608160000180548060200260200160405190810160405280929190818152602001828054801561307a57602002820191906000526020600020905b815481526020019060010190808311613066575b50505050509050919050565b600082600001828154811061309d5761309d61354e565b9060005260206000200154905092915050565b80356001600160801b03811681146130c757600080fd5b919050565b6000602082840312156130de57600080fd5b612dbe826130b0565b6001600160a01b038116811461103757600080fd5b80356130c7816130e7565b60006020828403121561311957600080fd5b8135612dbe816130e7565b60006020828403121561313657600080fd5b813562ffffff81168114612dbe57600080fd5b60006020828403121561315b57600080fd5b81358015158114612dbe57600080fd5b60008060006060848603121561318057600080fd5b833561318b816130e7565b9250613199602085016130b0565b915060408401356131a9816130e7565b809150509250925092565b600080602083850312156131c757600080fd5b823567ffffffffffffffff808211156131df57600080fd5b818501915085601f8301126131f357600080fd5b81358181111561320257600080fd5b8660208260051b850101111561321757600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052602160045260246000fd5b60006060820190506001600160801b038084511683528060208501511660208401525060408301516003811061328557634e487b7160e01b600052602160045260246000fd5b8060408401525092915050565b600080604083850312156132a557600080fd5b82356132b0816130e7565b915060208301356132c0816130e7565b809150509250929050565b6000806000606084860312156132e057600080fd5b6132e9846130b0565b92506020840135613199816130e7565b803561ffff811681146130c757600080fd5b60006020828403121561331d57600080fd5b612dbe826132f9565b60006020828403121561333857600080fd5b5035919050565b600060a0828403121561335157600080fd5b50919050565b6000806040838503121561336a57600080fd5b6132b0836130b0565b821515815260006020604081840152835180604085015260005b818110156133a95785810183015185820160600152820161338d565b818111156133bb576000606083870101525b50601f01601f191692909201606001949350505050565b600081518084526020808501945080840160005b8381101561340b5781516001600160a01b0316875295820195908201906001016133e6565b509495945050505050565b602081526000612dbe60208301846133d2565b6000806040838503121561343c57600080fd5b613445836132f9565b9150613453602084016130b0565b90509250929050565b821515815260406020820152600061347760408301846133d2565b949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260089082015267464c3a452d33303160c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b0380831681851680830382111561350e5761350e6134d6565b01949350505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526008908201526723261d229699981960c11b604082015260600190565b60006020828403121561359857600080fd5b5051919050565b60208082526008908201526711930e914b4c4c0d60c21b604082015260600190565b600082198211156135d4576135d46134d6565b500190565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135613604816130e7565b61360e81836135d9565b50602082013561361d816130e7565b61362a81600184016135d9565b506040820135613639816130e7565b61364681600284016135d9565b506060820135613655816130e7565b61366281600384016135d9565b50608082013560048201555050565b600082821015613683576136836134d6565b500390565b634e487b7160e01b600052604160045260246000fd5b600060a082840312156136b057600080fd5b60405160a0810181811067ffffffffffffffff821117156136e157634e487b7160e01b600052604160045260246000fd5b60405282356136ef816130e7565b815260208301356136ff816130e7565b6020820152613710604084016130fc565b6040820152613721606084016130fc565b6060820152608083013560808201528091505092915050565b60006001600160801b038381169083168181101561375a5761375a6134d6565b039392505050565b600061ffff808316818103613779576137796134d6565b6001019392505050565b600060018201613795576137956134d6565b5060010190565b60006001600160801b03808316818103613779576137796134d6565b600062ffffff8381169083168181101561375a5761375a6134d6565b60008160001904831182151516156137ee576137ee6134d6565b500290565b60008261381057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c634300080f000aa164736f6c634300080f000a6080604052678ac7230489e800006004557001000000000000006c6b935b8bbd400000600555600680546001600160c01b031916730a00c35000000000000000000000002e90edd0001790556000600c553480156200005d57600080fd5b50620000693362000073565b60018055620000c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61382280620000d36000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c8063715018a611610167578063d30c9952116100ce578063e70abe9211610087578063e70abe921461077c578063e9e0953f1461078f578063f09a40161461079d578063f2fde38b146107b0578063fa2e750b146107c3578063fe67a54b146107e457600080fd5b8063d30c995214610708578063db4b9dc01461071b578063db9f60ff1461072e578063dde8119f14610741578063e004f5de14610749578063e3d2400f1461075c57600080fd5b806398427177116101205780639842717714610686578063afb8327114610699578063b72ccf37146106ac578063c15ffd87146106d6578063c6e11004146106e9578063cf5303cf146106f257600080fd5b8063715018a6146105fc57806374ecaa7d146106045780637d495139146106175780637ffaa99c1461062a5780638da5cb5b1461064e5780639035b0831461067357600080fd5b80633963510b1161020b57806359a5ea75116101c457806359a5ea751461058a5780635c1a928a146105a45780635c7e9db8146105b757806360448443146105ca578063652eba9b146105e15780636b64c769146105f457600080fd5b80633963510b146104175780633bd950731461042a5780633d621e4c1461043d5780633e53ec7314610468578063501ee12614610536578063559202d51461054957600080fd5b8063219ee3941161025d578063219ee3941461037b57806326371b841461038e5780632897c4f3146103a15780632932b55e146103b457806330ccebb5146103c75780633535228c146103e757600080fd5b806303fddc0d1461029a57806306c7a236146102af57806308fe95b51461032d5780630aa0ce5c146103555780630b58e6db14610368575b600080fd5b6102ad6102a83660046130cc565b6107ec565b005b6103046102bd366004613107565b604080518082018252600080825260209182018190526001600160a01b039384168152600b8252829020825180840190935280548352600101549092169181019190915290565b60408051825181526020928301516001600160a01b031692810192909252015b60405180910390f35b60065461034290600160981b900461ffff1681565b60405161ffff9091168152602001610324565b6102ad610363366004613124565b610874565b6102ad6103763660046130cc565b61095c565b6102ad610389366004613149565b6109d4565b6102ad61039c36600461316b565b610a1c565b6102ad6103af366004613107565b610a5f565b6102ad6103c23660046131b4565b610b96565b6103da6103d5366004613107565b610d27565b604051610324919061323f565b6103fa6103f5366004613292565b610dc6565b604080519283526001600160801b03909116602083015201610324565b6102ad610425366004613107565b610e81565b6102ad610438366004613107565b611004565b600554610450906001600160801b031681565b6040516001600160801b039091168152602001610324565b6104f6610476366004613107565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600a6020908152604091829020825160808101845281548152600182015492810192909252600201546001600160801b0380821693830193909352600160801b9004909116606082015290565b604080518251815260208084015190820152828201516001600160801b039081169282019290925260609283015190911691810191909152608001610324565b6102ad610544366004613107565b61103a565b61055c6105573660046132cb565b611119565b6040805193151584526001600160a01b0390921660208401526001600160801b031690820152606001610324565b60055461045090600160801b90046001600160801b031681565b6102ad6105b236600461330b565b6111d5565b6102ad6105c5366004613107565b611252565b6105d3600c5481565b604051908152602001610324565b6102ad6105ef366004613107565b6112ca565b6102ad6113e5565b6102ad61148e565b6102ad610612366004613326565b6114c4565b6102ad61062536600461333f565b611523565b60065461063e90600160a81b900460ff1681565b6040519015158152602001610324565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610324565b6102ad610681366004613357565b611cf7565b61055c610694366004613292565b611d4c565b6102ad6106a7366004613326565b611d70565b6006546106c290600160801b900462ffffff1681565b60405162ffffff9091168152602001610324565b6102ad6106e4366004613107565b611e43565b6105d360045481565b6106fa611e73565b604051610324929190613373565b6102ad610716366004613107565b611f81565b600654610450906001600160801b031681565b6102ad61073c366004613149565b6120c5565b61045061213c565b60025461065b906001600160a01b031681565b61076f61076a3660046130cc565b612163565b6040516103249190613416565b60035461065b906001600160a01b031681565b6104506001600160801b0381565b6102ad6107ab366004613292565b61218d565b6102ad6107be366004613107565b612224565b6107d66107d1366004613429565b6122bc565b60405161032492919061345c565b61063e61246f565b6000546001600160a01b0316331461081f5760405162461bcd60e51b81526004016108169061347f565b60405180910390fd5b600680546001600160801b0319166001600160801b0383169081179091556040519081527f256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c906020015b60405180910390a150565b6000546001600160a01b0316331461089e5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156108c85760405162461bcd60e51b8152600401610816906134b4565b620f42408162ffffff161061090a5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313360c01b6044820152606401610816565b6006805462ffffff60801b1916600160801b62ffffff8416908102919091179091556040519081527f255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda90602001610869565b6000546001600160a01b031633146109865760405162461bcd60e51b81526004016108169061347f565b600580546001600160801b0319166001600160801b0383169081179091556040519081527f516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f718027290602001610869565b6000546001600160a01b031633146109fe5760405162461bcd60e51b81526004016108169061347f565b60068054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016108169061347f565b610a4f836125ba565b610a5a83838361279a565b505050565b6000546001600160a01b03163314610a895760405162461bcd60e51b81526004016108169061347f565b6001600160a01b03811660009081526007602052604090206002600182015460ff166002811115610abc57610abc613229565b14610af45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b600654600090600160a81b900460ff16610b2057600554600160801b90046001600160801b0316610b3e565b600554610b3e90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f6b4dbdf55669f6c01188b405d3882517d953fb610502150c0720131e879f876e90600090a3505050565b600260015403610bb85760405162461bcd60e51b815260040161081690613517565b60026001556003546001600160a01b03163314610c025760405162461bcd60e51b815260206004820152600860248201526723261d229698981b60c11b6044820152606401610816565b600654600160b81b900460ff16158015610c265750600654600160b01b900460ff16155b610c5d5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6006546001600160801b03163a1115610ca35760405162461bcd60e51b8152602060048201526008602482015267464c3a452d33303760c01b6044820152606401610816565b8060005b81811015610d1d576000848483818110610cc357610cc361354e565b9050602002016020810190610cd89190613107565b6001600160a01b031614610d1557610d15848483818110610cfb57610cfb61354e565b9050602002016020810190610d109190613107565b6128d1565b600101610ca7565b5050600180555050565b610d4860408051606081018252600080825260208201819052909182015290565b6001600160a01b038216600090815260076020908152604091829020825160608101845281546001600160801b038082168352600160801b90910416928101929092526001810154919290919083019060ff166002811115610dac57610dac613229565b6002811115610dbd57610dbd613229565b90525092915050565b6006546000908190600160a81b900460ff16610df45760405162461bcd60e51b815260040161081690613564565b5050600554600160801b90046001600160801b031660008181526008602090815260408083206001600160a01b0396871684528252808320948616835293815290839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093526003830154909316606084015260049091015460809092018290529091565b6000546001600160a01b03163314610eab5760405162461bcd60e51b81526004016108169061347f565b600260015403610ecd5760405162461bcd60e51b815260040161081690613517565b60026001819055546001600160a01b0390811690821603610f1b5760405162461bcd60e51b815260206004820152600860248201526723261d229698981960c11b6044820152606401610816565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190613586565b90508015610ffb57610fb6610fa56000546001600160a01b031690565b6001600160a01b0384169083612afb565b6000546040518281526001600160a01b039091169030907f6c9d637297625e945b296ff73a71fcfbd0a9e062652b6491a921c4c60194176b9060200160405180910390a35b50506001805550565b6000546001600160a01b0316331461102e5760405162461bcd60e51b81526004016108169061347f565b611037816125ba565b50565b6000546001600160a01b031633146110645760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff161561108e5760405162461bcd60e51b8152600401610816906134b4565b6001600160a01b0381166110cf5760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3030360c41b6044820152606401610816565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc990600090a250565b600554600090819081906001600160801b03600160801b9091048116908716106111705760405162461bcd60e51b8152602060048201526008602482015267464c2d453a32303160c01b6044820152606401610816565b6001600160801b03861660009081526008602090815260408083206001600160a01b03808a1685529083528184208882168552909252909120600201541680156111c2576001935091508590506111cc565b6000935091508590505b93509350939050565b6000546001600160a01b031633146111ff5760405162461bcd60e51b81526004016108169061347f565b6006805461ffff60981b1916600160981b61ffff8481168202929092179283905560405192041681527ff20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e4890602001610869565b6000546001600160a01b0316331461127c5760405162461bcd60e51b81526004016108169061347f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b455090602001610869565b6000546001600160a01b031633146112f45760405162461bcd60e51b81526004016108169061347f565b6001600160a01b038116600090815260076020526040902060018082015460ff16600281111561132657611326613229565b146113435760405162461bcd60e51b81526004016108169061359f565b600654600090600160a81b900460ff1661136f57600554600160801b90046001600160801b031661138d565b60055461138d90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f50b47e81a29bef5bc0c09d99b7ac8fc76d78e6b3c3590301827bd4b67bc8840990600090a3505050565b6000546001600160a01b0316331461140f5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156114395760405162461bcd60e51b8152600401610816906134b4565b60068054600160a81b60ff60a81b19909116179055600554604051600160801b9091046001600160801b0316907f38b040053f48d9e3c983bb3a552b8323820ff833ceb2534f3099c195b105cc6c90600090a2565b6000546001600160a01b031633146114b85760405162461bcd60e51b81526004016108169061347f565b6114c26000612b79565b565b6000546001600160a01b031633146114ee5760405162461bcd60e51b81526004016108169061347f565b60048190556040518181527f7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a690602001610869565b600654600160a81b900460ff1661154c5760405162461bcd60e51b815260040161081690613564565b600654600160b01b900460ff16156115915760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6002600154036115b35760405162461bcd60e51b815260040161081690613517565b60026001556115c86080820160608301613107565b6001600160a01b0316336001600160a01b0316146116135760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303360c01b6044820152606401610816565b60006007816116256020850185613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561168657611686613229565b600281111561169757611697613229565b905250905060006007816116b16040860160208701613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561171257611712613229565b600281111561172357611723613229565b905250905060018260400151600281111561174057611740613229565b1461175d5760405162461bcd60e51b81526004016108169061359f565b60028160400151600281111561177557611775613229565b146117ad5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b60055460208301516001600160801b03600160801b90920482169116116118015760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303960c01b6044820152606401610816565b60055460208201516001600160801b03600160801b90920482169116116118555760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3231360c41b6044820152606401610816565b60055482516001600160801b03600160801b9092048216911611156118a75760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313160c01b6044820152606401610816565b60055481516001600160801b03600160801b9092048216911611156118f95760405162461bcd60e51b815260206004820152600860248201526723261d229699189960c11b6044820152606401610816565b600554600160801b90046001600160801b03166000908152600860209081526040822090829061192b90870187613107565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906119609190613107565b6001600160a01b03908116825260208083019390935260409182016000908120835160a0810185528154841681526001820154841681870152600282015484169481019490945260038101549092166060840152600490910154608083015290925090600a9082906119d490880188613107565b6001600160a01b0316815260208101919091526040016000206005546002820154919250600160801b918290046001600160801b03908116929091041614801590611a1f5750805415155b15611a44578054600182018054600090611a3a9084906135c1565b9091555050600081555b600554600160801b90046001600160801b03166000908152600860209081526040822087929091611a7790840184613107565b6001600160a01b03166001600160a01b031681526020019081526020016000206000876020016020810190611aac9190613107565b6001600160a01b031681526020810191909152604001600020611acf82826135f9565b5050608082015115611b6d57600080611aeb8460800151612bc9565b91509150600080611aff8960800135612bc9565b915091508281600c54611b1291906135c1565b611b1c9190613671565b600c5584548490611b2e9084906135c1565b611b389190613671565b8555611b5b611b4c368b90038b018b61369e565b87608001518860600151612c18565b611b6486612d87565b50505050611c1d565b6005546002820154600160801b918290046001600160801b03908116929091041614611bbb576005546002820180546001600160801b03600160801b93849004811690930292169190911790555b600080611bcb8760800135612bc9565b9150915080600c6000828254611be191906135c1565b9091555050825482908490600090611bfa9084906135c1565b90915550611c1a9050611c123689900389018961369e565b600080612c18565b50505b611c54611c2d6020870187613107565b600554600160801b90046001600160801b0316600090815260096020526040902090612da9565b50600554600160801b90046001600160801b0316611c786040870160208801613107565b6001600160a01b0316611c8e6020880188613107565b6001600160a01b03167fed843d47bb78802ebc13e8996623a126d58b999326562053c253db476fb522fa611cc860608a0160408b01613107565b604080516001600160a01b03909216825260808b013560208301520160405180910390a4505060018055505050565b60013360009081526007602052604090206001015460ff166002811115611d2057611d20613229565b14611d3d5760405162461bcd60e51b81526004016108169061359f565b611d4833838361279a565b5050565b6000806000611d63611d5c61213c565b8686611119565b9250925092509250925092565b6000546001600160a01b03163314611d9a5760405162461bcd60e51b81526004016108169061347f565b600260015403611dbc5760405162461bcd60e51b815260040161081690613517565b6002600155478111611e3c57611ded81611dde6000546001600160a01b031690565b6001600160a01b031690612dc5565b6000546001600160a01b03166001600160a01b03167f90881b74cde864d3a0b48a1be016fa7c3217b5dc2b02f4f65544ff1dfa92196982604051611e3391815260200190565b60405180910390a25b5060018055565b600260015403611e655760405162461bcd60e51b815260040161081690613517565b6002600155611e3c816128d1565b600654600090606090600160b81b900460ff1680611e9a5750600654600160b01b900460ff165b80611eaf57506006546001600160801b03163a115b15611ec95750506040805160208101909152600080825291565b6006546005546000935083918291611f0391600160981b900461ffff16906107d190600190600160801b90046001600160801b031661373a565b915091508115611f6557604051600194506314995aaf60e11b90611f2b908390602401613416565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152939492505050565b6000604051806020016040528060008152509350935050509091565b6000546001600160a01b03163314611fab5760405162461bcd60e51b81526004016108169061347f565b600654600090600160a81b900460ff16611fd757600554600160801b90046001600160801b0316611ff5565b600554611ff590600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600290526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561207b5761207b613229565b0217905550506040516001600160801b03831691506001600160a01b038416907f8bbd4ebefde66f702715e863992cd517982ed361339dc6b787ed8b397213fc4b90600090a35050565b6000546001600160a01b031633146120ef5760405162461bcd60e51b81526004016108169061347f565b60068054821515600160b01b0260ff60b01b199091161790556040517fa9bfed3d98385b3777389e321dbde773cf7d335fa604fefbae3dca93564f55869061086990831515815260200190565b60055460009061215e90600190600160801b90046001600160801b031661373a565b905090565b6001600160801b038116600090815260096020526040902060609061218790612ede565b92915050565b6000546001600160a01b031633146121b75760405162461bcd60e51b81526004016108169061347f565b6121c08261103a565b6121c981611252565b600580546001600160801b0316600160801b1790556121ef678ac7230489e800006114c4565b612201686c6b935b8bbd40000061095c565b61220f642e90edd0006107ec565b61221a61c350610874565b611d48600a6111d5565b6000546001600160a01b0316331461224e5760405162461bcd60e51b81526004016108169061347f565b6001600160a01b0381166122b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610816565b61103781612b79565b600060608361ffff1667ffffffffffffffff8111156122dd576122dd613688565b604051908082528060200260200182016040528015612306578160200160208202803683370190505b506001600160801b03841660009081526009602052604081209192508061232c83612eeb565b905060005b8181101561245c5760006123458583612ef5565b6001600160a01b0381166000818152600a602090815260408083208151608081018352815481526001820154818501526002909101546001600160801b0380821683850152600160801b90910481166060830152948452600b909252822054600554949550909391929190911610156123d6576001600160a01b0383166000908152600b60205260409020546123e3565b6005546001600160801b03165b90506123ef8282612f01565b1561242f5782888761ffff168151811061240b5761240b61354e565b6001600160a01b039092166020928302919091019091015261242c86613762565b95505b8a61ffff168661ffff16106124465750505061245c565b505050808061245490613783565b915050612331565b505061ffff161515959194509092505050565b600080546001600160a01b0316331461249a5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff166124c35760405162461bcd60e51b815260040161081690613564565b6002600154036124e55760405162461bcd60e51b815260040161081690613517565b60026001556006805460ff60a81b19169055600554604051600160801b9091046001600160801b0316907f95bed6fbde15e474e4ad8a6d2aaa4a759e6e383d33f8de7c945369167ebf849090600090a26005805460109061255590600160801b90046001600160801b031661379c565b91906101000a8154816001600160801b0302191690836001600160801b031602179055506000600c5490506000600c819055506125b061259d6000546001600160a01b031690565b6002546001600160a01b03169083612afb565b5050600180805590565b600654600090600160a81b900460ff166125e657600554600160801b90046001600160801b0316612604565b60055461260490600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600190526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561268a5761268a613229565b021790555050506001600160a01b0382166000908152600a60209081526040808320815160808101835281548152600182015493810193909352600201546001600160801b0380821692840192909252600160801b90041660608201819052909103612756576040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b038a168552600a909352949092209251835590516001830155915191516001600160801b03908116600160801b029216919091176002909101555b6040516001600160801b038316906001600160a01b038516907f197eaede07bece72c8e0d907669d15a7f24328f239a5f1c28ccefc94bfadb35890600090a3505050565b6005546001600160801b0390811690831610156127e45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b6001600160a01b0381161580159061280557506001600160a01b0381163014155b61283c5760405162461bcd60e51b815260206004820152600860248201526723261d229699181960c11b6044820152606401610816565b6040805180820182526001600160801b0384168082526001600160a01b0384811660208085018281528984166000818152600b8452889020965187559051600190960180546001600160a01b031916969094169590951790925584519283529082015290917fec42a6c8c2a3b9298ec01f8c989a25ba1341377172e59d478ac6780a89451634910160405180910390a2505050565b60016001600160a01b03821660009081526007602052604090206001015460ff16600281111561290357612903613229565b146129205760405162461bcd60e51b81526004016108169061359f565b6001600160a01b0381166000908152600a60209081526040918290208251608081018452815481526001808301549382019390935260028201546001600160801b0380821695830195909552600160801b900490931660608401529161298591612f01565b6129bc5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303760c01b6044820152606401610816565b60055460028201546000916001600160801b03600160801b918290048116919092049091161015612a0357600182015482546129f891906135c1565b600083559050612a0a565b5060018101545b60006001838101829055600554600285018054600160801b9092046001600160801b03166001600160801b03199092169190911790556001600160a01b038581168352600b6020908152604093849020845180860190955280548552909201541690820181905284919015612a8157806020015191505b600254612a98906001600160a01b03168385612afb565b600554604080518581526001600160a01b0385811660208301523393600160801b90046001600160801b031692908916917f81c1b0e2611c67c291f656df4c6cd2c85bf255152046acdccd8df8a5ee303456910160405180910390a45050505050565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612b735760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610816565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006546000908190620f424090612bec90600160801b900462ffffff16826137b8565b612bfb9062ffffff16856137d4565b612c0591906137f3565b9150612c118284613671565b9050915091565b600454612c2590836135c1565b83608001511015612c635760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b806001600160a01b031683606001516001600160a01b031603612cb35760405162461bcd60e51b815260206004820152600860248201526711930e914b4c8c0d60c21b6044820152606401610816565b608083015160025460608501516040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015612d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613586565b1015612d635760405162461bcd60e51b815260206004820152600860248201526723261d229699181b60c11b6044820152606401610816565b60608301516080840151600254610a5a926001600160a01b03909116913090612f51565b60608101516080820151600254611037926001600160a01b0390911691612afb565b6000612dbe836001600160a01b038416612fdb565b9392505050565b80471015612e155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610816565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e62576040519150601f19603f3d011682016040523d82523d6000602084013e612e67565b606091505b5050905080610a5a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610816565b60606000612dbe8361302a565b6000612187825490565b6000612dbe8383613086565b6000818360200151101580612dbe5750602083015183518391612f23916135c1565b10158015612dbe575060055460608401516001600160801b03600160801b9092048216911610905092915050565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080612fd45760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610816565b5050505050565b600081815260018301602052604081205461302257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612187565b506000612187565b60608160000180548060200260200160405190810160405280929190818152602001828054801561307a57602002820191906000526020600020905b815481526020019060010190808311613066575b50505050509050919050565b600082600001828154811061309d5761309d61354e565b9060005260206000200154905092915050565b80356001600160801b03811681146130c757600080fd5b919050565b6000602082840312156130de57600080fd5b612dbe826130b0565b6001600160a01b038116811461103757600080fd5b80356130c7816130e7565b60006020828403121561311957600080fd5b8135612dbe816130e7565b60006020828403121561313657600080fd5b813562ffffff81168114612dbe57600080fd5b60006020828403121561315b57600080fd5b81358015158114612dbe57600080fd5b60008060006060848603121561318057600080fd5b833561318b816130e7565b9250613199602085016130b0565b915060408401356131a9816130e7565b809150509250925092565b600080602083850312156131c757600080fd5b823567ffffffffffffffff808211156131df57600080fd5b818501915085601f8301126131f357600080fd5b81358181111561320257600080fd5b8660208260051b850101111561321757600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052602160045260246000fd5b60006060820190506001600160801b038084511683528060208501511660208401525060408301516003811061328557634e487b7160e01b600052602160045260246000fd5b8060408401525092915050565b600080604083850312156132a557600080fd5b82356132b0816130e7565b915060208301356132c0816130e7565b809150509250929050565b6000806000606084860312156132e057600080fd5b6132e9846130b0565b92506020840135613199816130e7565b803561ffff811681146130c757600080fd5b60006020828403121561331d57600080fd5b612dbe826132f9565b60006020828403121561333857600080fd5b5035919050565b600060a0828403121561335157600080fd5b50919050565b6000806040838503121561336a57600080fd5b6132b0836130b0565b821515815260006020604081840152835180604085015260005b818110156133a95785810183015185820160600152820161338d565b818111156133bb576000606083870101525b50601f01601f191692909201606001949350505050565b600081518084526020808501945080840160005b8381101561340b5781516001600160a01b0316875295820195908201906001016133e6565b509495945050505050565b602081526000612dbe60208301846133d2565b6000806040838503121561343c57600080fd5b613445836132f9565b9150613453602084016130b0565b90509250929050565b821515815260406020820152600061347760408301846133d2565b949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260089082015267464c3a452d33303160c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b0380831681851680830382111561350e5761350e6134d6565b01949350505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526008908201526723261d229699981960c11b604082015260600190565b60006020828403121561359857600080fd5b5051919050565b60208082526008908201526711930e914b4c4c0d60c21b604082015260600190565b600082198211156135d4576135d46134d6565b500190565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135613604816130e7565b61360e81836135d9565b50602082013561361d816130e7565b61362a81600184016135d9565b506040820135613639816130e7565b61364681600284016135d9565b506060820135613655816130e7565b61366281600384016135d9565b50608082013560048201555050565b600082821015613683576136836134d6565b500390565b634e487b7160e01b600052604160045260246000fd5b600060a082840312156136b057600080fd5b60405160a0810181811067ffffffffffffffff821117156136e157634e487b7160e01b600052604160045260246000fd5b60405282356136ef816130e7565b815260208301356136ff816130e7565b6020820152613710604084016130fc565b6040820152613721606084016130fc565b6060820152608083013560808201528091505092915050565b60006001600160801b038381169083168181101561375a5761375a6134d6565b039392505050565b600061ffff808316818103613779576137796134d6565b6001019392505050565b600060018201613795576137956134d6565b5060010190565b60006001600160801b03808316818103613779576137796134d6565b600062ffffff8381169083168181101561375a5761375a6134d6565b60008160001904831182151516156137ee576137ee6134d6565b500290565b60008261381057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c634300080f000a68656c6c6f000000000000000000000000000000000000000000000000000000", - "nonce": "0x0", - "accessList": [] - } - } - ], - "receipts": [], - "libraries": [], - "pending": [ - "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c" - ], - "path": "broadcast/PreProxyDeploy.s.sol/137/run-latest.json", - "returns": {}, - "timestamp": 1659051658 -} \ No newline at end of file diff --git a/broadcast/PreProxyDeploy.s.sol/137/run-1659051665.json b/broadcast/PreProxyDeploy.s.sol/137/run-1659051665.json deleted file mode 100644 index 9cbda24..0000000 --- a/broadcast/PreProxyDeploy.s.sol/137/run-1659051665.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "type": "CREATE", - "contractAddress": "0xc71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "tx": { - "type": "0x02", - "from": "0x1ba0f96bf6b26df11a58553c6db9a0314938cf70", - "gas": "0x89157c", - "value": "0x0", - "data": "0x608060405234801561001057600080fd5b5060405161797438038061797483398101604081905261002f91610440565b7fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80546001600160a01b031990811673b3f5503f93d5ef84b06993a1975b9d21b962892f9081179092557f2bda5adf664a0c31bf9134cad8d937629fcee52b9cefd545e0c716efa1202a518054821673527a819db1eb0e34426297b03bae11f2f8b3a19e1790557fa8c57e13d49dd6e2870c5d5f809130d4d18970dd320604381d96a20d80a714f480548216831790557fa3e343505a37a5f41b372e3722e1aa14239f74a613d1511ba6a638cac5ed8589805482169092179091557fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e08054821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790557f0cb0be258cd4e0f89ef5514ec447dd8846b0cf865c7d0d8ea82ff58a1eae81a180548216730d500b1d8e8ef31e21c99d1db9a6444d3adf12701790557f2af04f721798314fc694a46b3db9f8005ee5d928ceb0c93e438e01e3ac240ed480548216739c3c9283d3e44854697cd22d3faa240cfb0328899081179091557f7a1c85dbd356d1ede4c0e23eb93fed1980e3ae3583babceeae9b100fd153ad6e8054909216179055466000908152600160209081526040808320546002909252909120546001600160a01b039081169116806102515760405162461bcd60e51b81526020600482015260066024820152654f286f29707360d01b60448201526064015b60405180910390fd5b6001600160a01b0382166102915760405162461bcd60e51b815260206004820152600760248201526615dc985c1c195960ca1b6044820152606401610248565b61029c8383836102a4565b505050610459565b826040516102b190610433565b8190604051809103906000f59050801580156102d1573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216918217905561032a5760405162461bcd60e51b815260206004820152600a60248201526915dc9bdb99c81a5b9a5d60b21b6044820152606401610248565b6000546040516001600160a01b0390911681527fa89c1a761177532f843f74a1ba026520efa520185852784cc804d057c8b96a5f9060200160405180910390a160005460405163784d200b60e11b81526001600160a01b03848116600483015283811660248301529091169063f09a401690604401600060405180830381600087803b1580156103b957600080fd5b505af11580156103cd573d6000803e3d6000fd5b505060005460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b50505050505050565b6138f58061407f83390190565b60006020828403121561045257600080fd5b5051919050565b613c17806104686000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630e2920441461005c5780637d0464521461008c5780637f79c601146100b55780638c880723146100de57806396ca14b114610110575b600080fd5b60005461006f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61006f61009a3660046102c1565b6002602052600090815260409020546001600160a01b031681565b61006f6100c33660046102c1565b6001602052600090815260409020546001600160a01b031681565b6100f16100ec3660046102c1565b61014a565b604080516001600160a01b039093168352901515602083015201610083565b4660009081526001602090815260408083205460028352928190205481516001600160a01b03918216815293169183019190915201610083565b46600090815260016020908152604080832054600290925282205482916001600160a01b039182169116806101af5760405162461bcd60e51b81526020600482015260066024820152654f286f29707360d01b60448201526064015b60405180910390fd5b6001600160a01b0382166101ef5760405162461bcd60e51b815260206004820152600760248201526615dc985c1c195960ca1b60448201526064016101a6565b60ff60f81b308660405180602001610206906102b4565b601f1982820381018352601f90910116604081905261022891906020016102da565b6040516020818303038152906040528051906020012060405160200161028594939291906001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051601f198184030181529190528051602090910120956001600160a01b0387163b151595509350505050565b6138f58061031683390190565b6000602082840312156102d357600080fd5b5035919050565b6000825160005b818110156102fb57602081860181015185830152016102e1565b8181111561030a576000828501525b50919091019291505056fe6080604052678ac7230489e800006004557001000000000000006c6b935b8bbd400000600555600680546001600160c01b031916730a00c35000000000000000000000002e90edd0001790556000600c553480156200005d57600080fd5b50620000693362000073565b60018055620000c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61382280620000d36000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c8063715018a611610167578063d30c9952116100ce578063e70abe9211610087578063e70abe921461077c578063e9e0953f1461078f578063f09a40161461079d578063f2fde38b146107b0578063fa2e750b146107c3578063fe67a54b146107e457600080fd5b8063d30c995214610708578063db4b9dc01461071b578063db9f60ff1461072e578063dde8119f14610741578063e004f5de14610749578063e3d2400f1461075c57600080fd5b806398427177116101205780639842717714610686578063afb8327114610699578063b72ccf37146106ac578063c15ffd87146106d6578063c6e11004146106e9578063cf5303cf146106f257600080fd5b8063715018a6146105fc57806374ecaa7d146106045780637d495139146106175780637ffaa99c1461062a5780638da5cb5b1461064e5780639035b0831461067357600080fd5b80633963510b1161020b57806359a5ea75116101c457806359a5ea751461058a5780635c1a928a146105a45780635c7e9db8146105b757806360448443146105ca578063652eba9b146105e15780636b64c769146105f457600080fd5b80633963510b146104175780633bd950731461042a5780633d621e4c1461043d5780633e53ec7314610468578063501ee12614610536578063559202d51461054957600080fd5b8063219ee3941161025d578063219ee3941461037b57806326371b841461038e5780632897c4f3146103a15780632932b55e146103b457806330ccebb5146103c75780633535228c146103e757600080fd5b806303fddc0d1461029a57806306c7a236146102af57806308fe95b51461032d5780630aa0ce5c146103555780630b58e6db14610368575b600080fd5b6102ad6102a83660046130cc565b6107ec565b005b6103046102bd366004613107565b604080518082018252600080825260209182018190526001600160a01b039384168152600b8252829020825180840190935280548352600101549092169181019190915290565b60408051825181526020928301516001600160a01b031692810192909252015b60405180910390f35b60065461034290600160981b900461ffff1681565b60405161ffff9091168152602001610324565b6102ad610363366004613124565b610874565b6102ad6103763660046130cc565b61095c565b6102ad610389366004613149565b6109d4565b6102ad61039c36600461316b565b610a1c565b6102ad6103af366004613107565b610a5f565b6102ad6103c23660046131b4565b610b96565b6103da6103d5366004613107565b610d27565b604051610324919061323f565b6103fa6103f5366004613292565b610dc6565b604080519283526001600160801b03909116602083015201610324565b6102ad610425366004613107565b610e81565b6102ad610438366004613107565b611004565b600554610450906001600160801b031681565b6040516001600160801b039091168152602001610324565b6104f6610476366004613107565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600a6020908152604091829020825160808101845281548152600182015492810192909252600201546001600160801b0380821693830193909352600160801b9004909116606082015290565b604080518251815260208084015190820152828201516001600160801b039081169282019290925260609283015190911691810191909152608001610324565b6102ad610544366004613107565b61103a565b61055c6105573660046132cb565b611119565b6040805193151584526001600160a01b0390921660208401526001600160801b031690820152606001610324565b60055461045090600160801b90046001600160801b031681565b6102ad6105b236600461330b565b6111d5565b6102ad6105c5366004613107565b611252565b6105d3600c5481565b604051908152602001610324565b6102ad6105ef366004613107565b6112ca565b6102ad6113e5565b6102ad61148e565b6102ad610612366004613326565b6114c4565b6102ad61062536600461333f565b611523565b60065461063e90600160a81b900460ff1681565b6040519015158152602001610324565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610324565b6102ad610681366004613357565b611cf7565b61055c610694366004613292565b611d4c565b6102ad6106a7366004613326565b611d70565b6006546106c290600160801b900462ffffff1681565b60405162ffffff9091168152602001610324565b6102ad6106e4366004613107565b611e43565b6105d360045481565b6106fa611e73565b604051610324929190613373565b6102ad610716366004613107565b611f81565b600654610450906001600160801b031681565b6102ad61073c366004613149565b6120c5565b61045061213c565b60025461065b906001600160a01b031681565b61076f61076a3660046130cc565b612163565b6040516103249190613416565b60035461065b906001600160a01b031681565b6104506001600160801b0381565b6102ad6107ab366004613292565b61218d565b6102ad6107be366004613107565b612224565b6107d66107d1366004613429565b6122bc565b60405161032492919061345c565b61063e61246f565b6000546001600160a01b0316331461081f5760405162461bcd60e51b81526004016108169061347f565b60405180910390fd5b600680546001600160801b0319166001600160801b0383169081179091556040519081527f256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c906020015b60405180910390a150565b6000546001600160a01b0316331461089e5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156108c85760405162461bcd60e51b8152600401610816906134b4565b620f42408162ffffff161061090a5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313360c01b6044820152606401610816565b6006805462ffffff60801b1916600160801b62ffffff8416908102919091179091556040519081527f255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda90602001610869565b6000546001600160a01b031633146109865760405162461bcd60e51b81526004016108169061347f565b600580546001600160801b0319166001600160801b0383169081179091556040519081527f516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f718027290602001610869565b6000546001600160a01b031633146109fe5760405162461bcd60e51b81526004016108169061347f565b60068054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016108169061347f565b610a4f836125ba565b610a5a83838361279a565b505050565b6000546001600160a01b03163314610a895760405162461bcd60e51b81526004016108169061347f565b6001600160a01b03811660009081526007602052604090206002600182015460ff166002811115610abc57610abc613229565b14610af45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b600654600090600160a81b900460ff16610b2057600554600160801b90046001600160801b0316610b3e565b600554610b3e90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f6b4dbdf55669f6c01188b405d3882517d953fb610502150c0720131e879f876e90600090a3505050565b600260015403610bb85760405162461bcd60e51b815260040161081690613517565b60026001556003546001600160a01b03163314610c025760405162461bcd60e51b815260206004820152600860248201526723261d229698981b60c11b6044820152606401610816565b600654600160b81b900460ff16158015610c265750600654600160b01b900460ff16155b610c5d5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6006546001600160801b03163a1115610ca35760405162461bcd60e51b8152602060048201526008602482015267464c3a452d33303760c01b6044820152606401610816565b8060005b81811015610d1d576000848483818110610cc357610cc361354e565b9050602002016020810190610cd89190613107565b6001600160a01b031614610d1557610d15848483818110610cfb57610cfb61354e565b9050602002016020810190610d109190613107565b6128d1565b600101610ca7565b5050600180555050565b610d4860408051606081018252600080825260208201819052909182015290565b6001600160a01b038216600090815260076020908152604091829020825160608101845281546001600160801b038082168352600160801b90910416928101929092526001810154919290919083019060ff166002811115610dac57610dac613229565b6002811115610dbd57610dbd613229565b90525092915050565b6006546000908190600160a81b900460ff16610df45760405162461bcd60e51b815260040161081690613564565b5050600554600160801b90046001600160801b031660008181526008602090815260408083206001600160a01b0396871684528252808320948616835293815290839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093526003830154909316606084015260049091015460809092018290529091565b6000546001600160a01b03163314610eab5760405162461bcd60e51b81526004016108169061347f565b600260015403610ecd5760405162461bcd60e51b815260040161081690613517565b60026001819055546001600160a01b0390811690821603610f1b5760405162461bcd60e51b815260206004820152600860248201526723261d229698981960c11b6044820152606401610816565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190613586565b90508015610ffb57610fb6610fa56000546001600160a01b031690565b6001600160a01b0384169083612afb565b6000546040518281526001600160a01b039091169030907f6c9d637297625e945b296ff73a71fcfbd0a9e062652b6491a921c4c60194176b9060200160405180910390a35b50506001805550565b6000546001600160a01b0316331461102e5760405162461bcd60e51b81526004016108169061347f565b611037816125ba565b50565b6000546001600160a01b031633146110645760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff161561108e5760405162461bcd60e51b8152600401610816906134b4565b6001600160a01b0381166110cf5760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3030360c41b6044820152606401610816565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc990600090a250565b600554600090819081906001600160801b03600160801b9091048116908716106111705760405162461bcd60e51b8152602060048201526008602482015267464c2d453a32303160c01b6044820152606401610816565b6001600160801b03861660009081526008602090815260408083206001600160a01b03808a1685529083528184208882168552909252909120600201541680156111c2576001935091508590506111cc565b6000935091508590505b93509350939050565b6000546001600160a01b031633146111ff5760405162461bcd60e51b81526004016108169061347f565b6006805461ffff60981b1916600160981b61ffff8481168202929092179283905560405192041681527ff20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e4890602001610869565b6000546001600160a01b0316331461127c5760405162461bcd60e51b81526004016108169061347f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b455090602001610869565b6000546001600160a01b031633146112f45760405162461bcd60e51b81526004016108169061347f565b6001600160a01b038116600090815260076020526040902060018082015460ff16600281111561132657611326613229565b146113435760405162461bcd60e51b81526004016108169061359f565b600654600090600160a81b900460ff1661136f57600554600160801b90046001600160801b031661138d565b60055461138d90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f50b47e81a29bef5bc0c09d99b7ac8fc76d78e6b3c3590301827bd4b67bc8840990600090a3505050565b6000546001600160a01b0316331461140f5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156114395760405162461bcd60e51b8152600401610816906134b4565b60068054600160a81b60ff60a81b19909116179055600554604051600160801b9091046001600160801b0316907f38b040053f48d9e3c983bb3a552b8323820ff833ceb2534f3099c195b105cc6c90600090a2565b6000546001600160a01b031633146114b85760405162461bcd60e51b81526004016108169061347f565b6114c26000612b79565b565b6000546001600160a01b031633146114ee5760405162461bcd60e51b81526004016108169061347f565b60048190556040518181527f7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a690602001610869565b600654600160a81b900460ff1661154c5760405162461bcd60e51b815260040161081690613564565b600654600160b01b900460ff16156115915760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6002600154036115b35760405162461bcd60e51b815260040161081690613517565b60026001556115c86080820160608301613107565b6001600160a01b0316336001600160a01b0316146116135760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303360c01b6044820152606401610816565b60006007816116256020850185613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561168657611686613229565b600281111561169757611697613229565b905250905060006007816116b16040860160208701613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561171257611712613229565b600281111561172357611723613229565b905250905060018260400151600281111561174057611740613229565b1461175d5760405162461bcd60e51b81526004016108169061359f565b60028160400151600281111561177557611775613229565b146117ad5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b60055460208301516001600160801b03600160801b90920482169116116118015760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303960c01b6044820152606401610816565b60055460208201516001600160801b03600160801b90920482169116116118555760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3231360c41b6044820152606401610816565b60055482516001600160801b03600160801b9092048216911611156118a75760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313160c01b6044820152606401610816565b60055481516001600160801b03600160801b9092048216911611156118f95760405162461bcd60e51b815260206004820152600860248201526723261d229699189960c11b6044820152606401610816565b600554600160801b90046001600160801b03166000908152600860209081526040822090829061192b90870187613107565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906119609190613107565b6001600160a01b03908116825260208083019390935260409182016000908120835160a0810185528154841681526001820154841681870152600282015484169481019490945260038101549092166060840152600490910154608083015290925090600a9082906119d490880188613107565b6001600160a01b0316815260208101919091526040016000206005546002820154919250600160801b918290046001600160801b03908116929091041614801590611a1f5750805415155b15611a44578054600182018054600090611a3a9084906135c1565b9091555050600081555b600554600160801b90046001600160801b03166000908152600860209081526040822087929091611a7790840184613107565b6001600160a01b03166001600160a01b031681526020019081526020016000206000876020016020810190611aac9190613107565b6001600160a01b031681526020810191909152604001600020611acf82826135f9565b5050608082015115611b6d57600080611aeb8460800151612bc9565b91509150600080611aff8960800135612bc9565b915091508281600c54611b1291906135c1565b611b1c9190613671565b600c5584548490611b2e9084906135c1565b611b389190613671565b8555611b5b611b4c368b90038b018b61369e565b87608001518860600151612c18565b611b6486612d87565b50505050611c1d565b6005546002820154600160801b918290046001600160801b03908116929091041614611bbb576005546002820180546001600160801b03600160801b93849004811690930292169190911790555b600080611bcb8760800135612bc9565b9150915080600c6000828254611be191906135c1565b9091555050825482908490600090611bfa9084906135c1565b90915550611c1a9050611c123689900389018961369e565b600080612c18565b50505b611c54611c2d6020870187613107565b600554600160801b90046001600160801b0316600090815260096020526040902090612da9565b50600554600160801b90046001600160801b0316611c786040870160208801613107565b6001600160a01b0316611c8e6020880188613107565b6001600160a01b03167fed843d47bb78802ebc13e8996623a126d58b999326562053c253db476fb522fa611cc860608a0160408b01613107565b604080516001600160a01b03909216825260808b013560208301520160405180910390a4505060018055505050565b60013360009081526007602052604090206001015460ff166002811115611d2057611d20613229565b14611d3d5760405162461bcd60e51b81526004016108169061359f565b611d4833838361279a565b5050565b6000806000611d63611d5c61213c565b8686611119565b9250925092509250925092565b6000546001600160a01b03163314611d9a5760405162461bcd60e51b81526004016108169061347f565b600260015403611dbc5760405162461bcd60e51b815260040161081690613517565b6002600155478111611e3c57611ded81611dde6000546001600160a01b031690565b6001600160a01b031690612dc5565b6000546001600160a01b03166001600160a01b03167f90881b74cde864d3a0b48a1be016fa7c3217b5dc2b02f4f65544ff1dfa92196982604051611e3391815260200190565b60405180910390a25b5060018055565b600260015403611e655760405162461bcd60e51b815260040161081690613517565b6002600155611e3c816128d1565b600654600090606090600160b81b900460ff1680611e9a5750600654600160b01b900460ff165b80611eaf57506006546001600160801b03163a115b15611ec95750506040805160208101909152600080825291565b6006546005546000935083918291611f0391600160981b900461ffff16906107d190600190600160801b90046001600160801b031661373a565b915091508115611f6557604051600194506314995aaf60e11b90611f2b908390602401613416565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152939492505050565b6000604051806020016040528060008152509350935050509091565b6000546001600160a01b03163314611fab5760405162461bcd60e51b81526004016108169061347f565b600654600090600160a81b900460ff16611fd757600554600160801b90046001600160801b0316611ff5565b600554611ff590600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600290526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561207b5761207b613229565b0217905550506040516001600160801b03831691506001600160a01b038416907f8bbd4ebefde66f702715e863992cd517982ed361339dc6b787ed8b397213fc4b90600090a35050565b6000546001600160a01b031633146120ef5760405162461bcd60e51b81526004016108169061347f565b60068054821515600160b01b0260ff60b01b199091161790556040517fa9bfed3d98385b3777389e321dbde773cf7d335fa604fefbae3dca93564f55869061086990831515815260200190565b60055460009061215e90600190600160801b90046001600160801b031661373a565b905090565b6001600160801b038116600090815260096020526040902060609061218790612ede565b92915050565b6000546001600160a01b031633146121b75760405162461bcd60e51b81526004016108169061347f565b6121c08261103a565b6121c981611252565b600580546001600160801b0316600160801b1790556121ef678ac7230489e800006114c4565b612201686c6b935b8bbd40000061095c565b61220f642e90edd0006107ec565b61221a61c350610874565b611d48600a6111d5565b6000546001600160a01b0316331461224e5760405162461bcd60e51b81526004016108169061347f565b6001600160a01b0381166122b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610816565b61103781612b79565b600060608361ffff1667ffffffffffffffff8111156122dd576122dd613688565b604051908082528060200260200182016040528015612306578160200160208202803683370190505b506001600160801b03841660009081526009602052604081209192508061232c83612eeb565b905060005b8181101561245c5760006123458583612ef5565b6001600160a01b0381166000818152600a602090815260408083208151608081018352815481526001820154818501526002909101546001600160801b0380821683850152600160801b90910481166060830152948452600b909252822054600554949550909391929190911610156123d6576001600160a01b0383166000908152600b60205260409020546123e3565b6005546001600160801b03165b90506123ef8282612f01565b1561242f5782888761ffff168151811061240b5761240b61354e565b6001600160a01b039092166020928302919091019091015261242c86613762565b95505b8a61ffff168661ffff16106124465750505061245c565b505050808061245490613783565b915050612331565b505061ffff161515959194509092505050565b600080546001600160a01b0316331461249a5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff166124c35760405162461bcd60e51b815260040161081690613564565b6002600154036124e55760405162461bcd60e51b815260040161081690613517565b60026001556006805460ff60a81b19169055600554604051600160801b9091046001600160801b0316907f95bed6fbde15e474e4ad8a6d2aaa4a759e6e383d33f8de7c945369167ebf849090600090a26005805460109061255590600160801b90046001600160801b031661379c565b91906101000a8154816001600160801b0302191690836001600160801b031602179055506000600c5490506000600c819055506125b061259d6000546001600160a01b031690565b6002546001600160a01b03169083612afb565b5050600180805590565b600654600090600160a81b900460ff166125e657600554600160801b90046001600160801b0316612604565b60055461260490600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600190526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561268a5761268a613229565b021790555050506001600160a01b0382166000908152600a60209081526040808320815160808101835281548152600182015493810193909352600201546001600160801b0380821692840192909252600160801b90041660608201819052909103612756576040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b038a168552600a909352949092209251835590516001830155915191516001600160801b03908116600160801b029216919091176002909101555b6040516001600160801b038316906001600160a01b038516907f197eaede07bece72c8e0d907669d15a7f24328f239a5f1c28ccefc94bfadb35890600090a3505050565b6005546001600160801b0390811690831610156127e45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b6001600160a01b0381161580159061280557506001600160a01b0381163014155b61283c5760405162461bcd60e51b815260206004820152600860248201526723261d229699181960c11b6044820152606401610816565b6040805180820182526001600160801b0384168082526001600160a01b0384811660208085018281528984166000818152600b8452889020965187559051600190960180546001600160a01b031916969094169590951790925584519283529082015290917fec42a6c8c2a3b9298ec01f8c989a25ba1341377172e59d478ac6780a89451634910160405180910390a2505050565b60016001600160a01b03821660009081526007602052604090206001015460ff16600281111561290357612903613229565b146129205760405162461bcd60e51b81526004016108169061359f565b6001600160a01b0381166000908152600a60209081526040918290208251608081018452815481526001808301549382019390935260028201546001600160801b0380821695830195909552600160801b900490931660608401529161298591612f01565b6129bc5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303760c01b6044820152606401610816565b60055460028201546000916001600160801b03600160801b918290048116919092049091161015612a0357600182015482546129f891906135c1565b600083559050612a0a565b5060018101545b60006001838101829055600554600285018054600160801b9092046001600160801b03166001600160801b03199092169190911790556001600160a01b038581168352600b6020908152604093849020845180860190955280548552909201541690820181905284919015612a8157806020015191505b600254612a98906001600160a01b03168385612afb565b600554604080518581526001600160a01b0385811660208301523393600160801b90046001600160801b031692908916917f81c1b0e2611c67c291f656df4c6cd2c85bf255152046acdccd8df8a5ee303456910160405180910390a45050505050565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612b735760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610816565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006546000908190620f424090612bec90600160801b900462ffffff16826137b8565b612bfb9062ffffff16856137d4565b612c0591906137f3565b9150612c118284613671565b9050915091565b600454612c2590836135c1565b83608001511015612c635760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b806001600160a01b031683606001516001600160a01b031603612cb35760405162461bcd60e51b815260206004820152600860248201526711930e914b4c8c0d60c21b6044820152606401610816565b608083015160025460608501516040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015612d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613586565b1015612d635760405162461bcd60e51b815260206004820152600860248201526723261d229699181b60c11b6044820152606401610816565b60608301516080840151600254610a5a926001600160a01b03909116913090612f51565b60608101516080820151600254611037926001600160a01b0390911691612afb565b6000612dbe836001600160a01b038416612fdb565b9392505050565b80471015612e155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610816565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e62576040519150601f19603f3d011682016040523d82523d6000602084013e612e67565b606091505b5050905080610a5a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610816565b60606000612dbe8361302a565b6000612187825490565b6000612dbe8383613086565b6000818360200151101580612dbe5750602083015183518391612f23916135c1565b10158015612dbe575060055460608401516001600160801b03600160801b9092048216911610905092915050565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080612fd45760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610816565b5050505050565b600081815260018301602052604081205461302257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612187565b506000612187565b60608160000180548060200260200160405190810160405280929190818152602001828054801561307a57602002820191906000526020600020905b815481526020019060010190808311613066575b50505050509050919050565b600082600001828154811061309d5761309d61354e565b9060005260206000200154905092915050565b80356001600160801b03811681146130c757600080fd5b919050565b6000602082840312156130de57600080fd5b612dbe826130b0565b6001600160a01b038116811461103757600080fd5b80356130c7816130e7565b60006020828403121561311957600080fd5b8135612dbe816130e7565b60006020828403121561313657600080fd5b813562ffffff81168114612dbe57600080fd5b60006020828403121561315b57600080fd5b81358015158114612dbe57600080fd5b60008060006060848603121561318057600080fd5b833561318b816130e7565b9250613199602085016130b0565b915060408401356131a9816130e7565b809150509250925092565b600080602083850312156131c757600080fd5b823567ffffffffffffffff808211156131df57600080fd5b818501915085601f8301126131f357600080fd5b81358181111561320257600080fd5b8660208260051b850101111561321757600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052602160045260246000fd5b60006060820190506001600160801b038084511683528060208501511660208401525060408301516003811061328557634e487b7160e01b600052602160045260246000fd5b8060408401525092915050565b600080604083850312156132a557600080fd5b82356132b0816130e7565b915060208301356132c0816130e7565b809150509250929050565b6000806000606084860312156132e057600080fd5b6132e9846130b0565b92506020840135613199816130e7565b803561ffff811681146130c757600080fd5b60006020828403121561331d57600080fd5b612dbe826132f9565b60006020828403121561333857600080fd5b5035919050565b600060a0828403121561335157600080fd5b50919050565b6000806040838503121561336a57600080fd5b6132b0836130b0565b821515815260006020604081840152835180604085015260005b818110156133a95785810183015185820160600152820161338d565b818111156133bb576000606083870101525b50601f01601f191692909201606001949350505050565b600081518084526020808501945080840160005b8381101561340b5781516001600160a01b0316875295820195908201906001016133e6565b509495945050505050565b602081526000612dbe60208301846133d2565b6000806040838503121561343c57600080fd5b613445836132f9565b9150613453602084016130b0565b90509250929050565b821515815260406020820152600061347760408301846133d2565b949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260089082015267464c3a452d33303160c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b0380831681851680830382111561350e5761350e6134d6565b01949350505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526008908201526723261d229699981960c11b604082015260600190565b60006020828403121561359857600080fd5b5051919050565b60208082526008908201526711930e914b4c4c0d60c21b604082015260600190565b600082198211156135d4576135d46134d6565b500190565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135613604816130e7565b61360e81836135d9565b50602082013561361d816130e7565b61362a81600184016135d9565b506040820135613639816130e7565b61364681600284016135d9565b506060820135613655816130e7565b61366281600384016135d9565b50608082013560048201555050565b600082821015613683576136836134d6565b500390565b634e487b7160e01b600052604160045260246000fd5b600060a082840312156136b057600080fd5b60405160a0810181811067ffffffffffffffff821117156136e157634e487b7160e01b600052604160045260246000fd5b60405282356136ef816130e7565b815260208301356136ff816130e7565b6020820152613710604084016130fc565b6040820152613721606084016130fc565b6060820152608083013560808201528091505092915050565b60006001600160801b038381169083168181101561375a5761375a6134d6565b039392505050565b600061ffff808316818103613779576137796134d6565b6001019392505050565b600060018201613795576137956134d6565b5060010190565b60006001600160801b03808316818103613779576137796134d6565b600062ffffff8381169083168181101561375a5761375a6134d6565b60008160001904831182151516156137ee576137ee6134d6565b500290565b60008261381057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c634300080f000aa164736f6c634300080f000a6080604052678ac7230489e800006004557001000000000000006c6b935b8bbd400000600555600680546001600160c01b031916730a00c35000000000000000000000002e90edd0001790556000600c553480156200005d57600080fd5b50620000693362000073565b60018055620000c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61382280620000d36000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c8063715018a611610167578063d30c9952116100ce578063e70abe9211610087578063e70abe921461077c578063e9e0953f1461078f578063f09a40161461079d578063f2fde38b146107b0578063fa2e750b146107c3578063fe67a54b146107e457600080fd5b8063d30c995214610708578063db4b9dc01461071b578063db9f60ff1461072e578063dde8119f14610741578063e004f5de14610749578063e3d2400f1461075c57600080fd5b806398427177116101205780639842717714610686578063afb8327114610699578063b72ccf37146106ac578063c15ffd87146106d6578063c6e11004146106e9578063cf5303cf146106f257600080fd5b8063715018a6146105fc57806374ecaa7d146106045780637d495139146106175780637ffaa99c1461062a5780638da5cb5b1461064e5780639035b0831461067357600080fd5b80633963510b1161020b57806359a5ea75116101c457806359a5ea751461058a5780635c1a928a146105a45780635c7e9db8146105b757806360448443146105ca578063652eba9b146105e15780636b64c769146105f457600080fd5b80633963510b146104175780633bd950731461042a5780633d621e4c1461043d5780633e53ec7314610468578063501ee12614610536578063559202d51461054957600080fd5b8063219ee3941161025d578063219ee3941461037b57806326371b841461038e5780632897c4f3146103a15780632932b55e146103b457806330ccebb5146103c75780633535228c146103e757600080fd5b806303fddc0d1461029a57806306c7a236146102af57806308fe95b51461032d5780630aa0ce5c146103555780630b58e6db14610368575b600080fd5b6102ad6102a83660046130cc565b6107ec565b005b6103046102bd366004613107565b604080518082018252600080825260209182018190526001600160a01b039384168152600b8252829020825180840190935280548352600101549092169181019190915290565b60408051825181526020928301516001600160a01b031692810192909252015b60405180910390f35b60065461034290600160981b900461ffff1681565b60405161ffff9091168152602001610324565b6102ad610363366004613124565b610874565b6102ad6103763660046130cc565b61095c565b6102ad610389366004613149565b6109d4565b6102ad61039c36600461316b565b610a1c565b6102ad6103af366004613107565b610a5f565b6102ad6103c23660046131b4565b610b96565b6103da6103d5366004613107565b610d27565b604051610324919061323f565b6103fa6103f5366004613292565b610dc6565b604080519283526001600160801b03909116602083015201610324565b6102ad610425366004613107565b610e81565b6102ad610438366004613107565b611004565b600554610450906001600160801b031681565b6040516001600160801b039091168152602001610324565b6104f6610476366004613107565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600a6020908152604091829020825160808101845281548152600182015492810192909252600201546001600160801b0380821693830193909352600160801b9004909116606082015290565b604080518251815260208084015190820152828201516001600160801b039081169282019290925260609283015190911691810191909152608001610324565b6102ad610544366004613107565b61103a565b61055c6105573660046132cb565b611119565b6040805193151584526001600160a01b0390921660208401526001600160801b031690820152606001610324565b60055461045090600160801b90046001600160801b031681565b6102ad6105b236600461330b565b6111d5565b6102ad6105c5366004613107565b611252565b6105d3600c5481565b604051908152602001610324565b6102ad6105ef366004613107565b6112ca565b6102ad6113e5565b6102ad61148e565b6102ad610612366004613326565b6114c4565b6102ad61062536600461333f565b611523565b60065461063e90600160a81b900460ff1681565b6040519015158152602001610324565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610324565b6102ad610681366004613357565b611cf7565b61055c610694366004613292565b611d4c565b6102ad6106a7366004613326565b611d70565b6006546106c290600160801b900462ffffff1681565b60405162ffffff9091168152602001610324565b6102ad6106e4366004613107565b611e43565b6105d360045481565b6106fa611e73565b604051610324929190613373565b6102ad610716366004613107565b611f81565b600654610450906001600160801b031681565b6102ad61073c366004613149565b6120c5565b61045061213c565b60025461065b906001600160a01b031681565b61076f61076a3660046130cc565b612163565b6040516103249190613416565b60035461065b906001600160a01b031681565b6104506001600160801b0381565b6102ad6107ab366004613292565b61218d565b6102ad6107be366004613107565b612224565b6107d66107d1366004613429565b6122bc565b60405161032492919061345c565b61063e61246f565b6000546001600160a01b0316331461081f5760405162461bcd60e51b81526004016108169061347f565b60405180910390fd5b600680546001600160801b0319166001600160801b0383169081179091556040519081527f256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c906020015b60405180910390a150565b6000546001600160a01b0316331461089e5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156108c85760405162461bcd60e51b8152600401610816906134b4565b620f42408162ffffff161061090a5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313360c01b6044820152606401610816565b6006805462ffffff60801b1916600160801b62ffffff8416908102919091179091556040519081527f255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda90602001610869565b6000546001600160a01b031633146109865760405162461bcd60e51b81526004016108169061347f565b600580546001600160801b0319166001600160801b0383169081179091556040519081527f516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f718027290602001610869565b6000546001600160a01b031633146109fe5760405162461bcd60e51b81526004016108169061347f565b60068054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016108169061347f565b610a4f836125ba565b610a5a83838361279a565b505050565b6000546001600160a01b03163314610a895760405162461bcd60e51b81526004016108169061347f565b6001600160a01b03811660009081526007602052604090206002600182015460ff166002811115610abc57610abc613229565b14610af45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b600654600090600160a81b900460ff16610b2057600554600160801b90046001600160801b0316610b3e565b600554610b3e90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f6b4dbdf55669f6c01188b405d3882517d953fb610502150c0720131e879f876e90600090a3505050565b600260015403610bb85760405162461bcd60e51b815260040161081690613517565b60026001556003546001600160a01b03163314610c025760405162461bcd60e51b815260206004820152600860248201526723261d229698981b60c11b6044820152606401610816565b600654600160b81b900460ff16158015610c265750600654600160b01b900460ff16155b610c5d5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6006546001600160801b03163a1115610ca35760405162461bcd60e51b8152602060048201526008602482015267464c3a452d33303760c01b6044820152606401610816565b8060005b81811015610d1d576000848483818110610cc357610cc361354e565b9050602002016020810190610cd89190613107565b6001600160a01b031614610d1557610d15848483818110610cfb57610cfb61354e565b9050602002016020810190610d109190613107565b6128d1565b600101610ca7565b5050600180555050565b610d4860408051606081018252600080825260208201819052909182015290565b6001600160a01b038216600090815260076020908152604091829020825160608101845281546001600160801b038082168352600160801b90910416928101929092526001810154919290919083019060ff166002811115610dac57610dac613229565b6002811115610dbd57610dbd613229565b90525092915050565b6006546000908190600160a81b900460ff16610df45760405162461bcd60e51b815260040161081690613564565b5050600554600160801b90046001600160801b031660008181526008602090815260408083206001600160a01b0396871684528252808320948616835293815290839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093526003830154909316606084015260049091015460809092018290529091565b6000546001600160a01b03163314610eab5760405162461bcd60e51b81526004016108169061347f565b600260015403610ecd5760405162461bcd60e51b815260040161081690613517565b60026001819055546001600160a01b0390811690821603610f1b5760405162461bcd60e51b815260206004820152600860248201526723261d229698981960c11b6044820152606401610816565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190613586565b90508015610ffb57610fb6610fa56000546001600160a01b031690565b6001600160a01b0384169083612afb565b6000546040518281526001600160a01b039091169030907f6c9d637297625e945b296ff73a71fcfbd0a9e062652b6491a921c4c60194176b9060200160405180910390a35b50506001805550565b6000546001600160a01b0316331461102e5760405162461bcd60e51b81526004016108169061347f565b611037816125ba565b50565b6000546001600160a01b031633146110645760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff161561108e5760405162461bcd60e51b8152600401610816906134b4565b6001600160a01b0381166110cf5760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3030360c41b6044820152606401610816565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc990600090a250565b600554600090819081906001600160801b03600160801b9091048116908716106111705760405162461bcd60e51b8152602060048201526008602482015267464c2d453a32303160c01b6044820152606401610816565b6001600160801b03861660009081526008602090815260408083206001600160a01b03808a1685529083528184208882168552909252909120600201541680156111c2576001935091508590506111cc565b6000935091508590505b93509350939050565b6000546001600160a01b031633146111ff5760405162461bcd60e51b81526004016108169061347f565b6006805461ffff60981b1916600160981b61ffff8481168202929092179283905560405192041681527ff20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e4890602001610869565b6000546001600160a01b0316331461127c5760405162461bcd60e51b81526004016108169061347f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b455090602001610869565b6000546001600160a01b031633146112f45760405162461bcd60e51b81526004016108169061347f565b6001600160a01b038116600090815260076020526040902060018082015460ff16600281111561132657611326613229565b146113435760405162461bcd60e51b81526004016108169061359f565b600654600090600160a81b900460ff1661136f57600554600160801b90046001600160801b031661138d565b60055461138d90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f50b47e81a29bef5bc0c09d99b7ac8fc76d78e6b3c3590301827bd4b67bc8840990600090a3505050565b6000546001600160a01b0316331461140f5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156114395760405162461bcd60e51b8152600401610816906134b4565b60068054600160a81b60ff60a81b19909116179055600554604051600160801b9091046001600160801b0316907f38b040053f48d9e3c983bb3a552b8323820ff833ceb2534f3099c195b105cc6c90600090a2565b6000546001600160a01b031633146114b85760405162461bcd60e51b81526004016108169061347f565b6114c26000612b79565b565b6000546001600160a01b031633146114ee5760405162461bcd60e51b81526004016108169061347f565b60048190556040518181527f7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a690602001610869565b600654600160a81b900460ff1661154c5760405162461bcd60e51b815260040161081690613564565b600654600160b01b900460ff16156115915760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6002600154036115b35760405162461bcd60e51b815260040161081690613517565b60026001556115c86080820160608301613107565b6001600160a01b0316336001600160a01b0316146116135760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303360c01b6044820152606401610816565b60006007816116256020850185613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561168657611686613229565b600281111561169757611697613229565b905250905060006007816116b16040860160208701613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561171257611712613229565b600281111561172357611723613229565b905250905060018260400151600281111561174057611740613229565b1461175d5760405162461bcd60e51b81526004016108169061359f565b60028160400151600281111561177557611775613229565b146117ad5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b60055460208301516001600160801b03600160801b90920482169116116118015760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303960c01b6044820152606401610816565b60055460208201516001600160801b03600160801b90920482169116116118555760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3231360c41b6044820152606401610816565b60055482516001600160801b03600160801b9092048216911611156118a75760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313160c01b6044820152606401610816565b60055481516001600160801b03600160801b9092048216911611156118f95760405162461bcd60e51b815260206004820152600860248201526723261d229699189960c11b6044820152606401610816565b600554600160801b90046001600160801b03166000908152600860209081526040822090829061192b90870187613107565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906119609190613107565b6001600160a01b03908116825260208083019390935260409182016000908120835160a0810185528154841681526001820154841681870152600282015484169481019490945260038101549092166060840152600490910154608083015290925090600a9082906119d490880188613107565b6001600160a01b0316815260208101919091526040016000206005546002820154919250600160801b918290046001600160801b03908116929091041614801590611a1f5750805415155b15611a44578054600182018054600090611a3a9084906135c1565b9091555050600081555b600554600160801b90046001600160801b03166000908152600860209081526040822087929091611a7790840184613107565b6001600160a01b03166001600160a01b031681526020019081526020016000206000876020016020810190611aac9190613107565b6001600160a01b031681526020810191909152604001600020611acf82826135f9565b5050608082015115611b6d57600080611aeb8460800151612bc9565b91509150600080611aff8960800135612bc9565b915091508281600c54611b1291906135c1565b611b1c9190613671565b600c5584548490611b2e9084906135c1565b611b389190613671565b8555611b5b611b4c368b90038b018b61369e565b87608001518860600151612c18565b611b6486612d87565b50505050611c1d565b6005546002820154600160801b918290046001600160801b03908116929091041614611bbb576005546002820180546001600160801b03600160801b93849004811690930292169190911790555b600080611bcb8760800135612bc9565b9150915080600c6000828254611be191906135c1565b9091555050825482908490600090611bfa9084906135c1565b90915550611c1a9050611c123689900389018961369e565b600080612c18565b50505b611c54611c2d6020870187613107565b600554600160801b90046001600160801b0316600090815260096020526040902090612da9565b50600554600160801b90046001600160801b0316611c786040870160208801613107565b6001600160a01b0316611c8e6020880188613107565b6001600160a01b03167fed843d47bb78802ebc13e8996623a126d58b999326562053c253db476fb522fa611cc860608a0160408b01613107565b604080516001600160a01b03909216825260808b013560208301520160405180910390a4505060018055505050565b60013360009081526007602052604090206001015460ff166002811115611d2057611d20613229565b14611d3d5760405162461bcd60e51b81526004016108169061359f565b611d4833838361279a565b5050565b6000806000611d63611d5c61213c565b8686611119565b9250925092509250925092565b6000546001600160a01b03163314611d9a5760405162461bcd60e51b81526004016108169061347f565b600260015403611dbc5760405162461bcd60e51b815260040161081690613517565b6002600155478111611e3c57611ded81611dde6000546001600160a01b031690565b6001600160a01b031690612dc5565b6000546001600160a01b03166001600160a01b03167f90881b74cde864d3a0b48a1be016fa7c3217b5dc2b02f4f65544ff1dfa92196982604051611e3391815260200190565b60405180910390a25b5060018055565b600260015403611e655760405162461bcd60e51b815260040161081690613517565b6002600155611e3c816128d1565b600654600090606090600160b81b900460ff1680611e9a5750600654600160b01b900460ff165b80611eaf57506006546001600160801b03163a115b15611ec95750506040805160208101909152600080825291565b6006546005546000935083918291611f0391600160981b900461ffff16906107d190600190600160801b90046001600160801b031661373a565b915091508115611f6557604051600194506314995aaf60e11b90611f2b908390602401613416565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152939492505050565b6000604051806020016040528060008152509350935050509091565b6000546001600160a01b03163314611fab5760405162461bcd60e51b81526004016108169061347f565b600654600090600160a81b900460ff16611fd757600554600160801b90046001600160801b0316611ff5565b600554611ff590600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600290526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561207b5761207b613229565b0217905550506040516001600160801b03831691506001600160a01b038416907f8bbd4ebefde66f702715e863992cd517982ed361339dc6b787ed8b397213fc4b90600090a35050565b6000546001600160a01b031633146120ef5760405162461bcd60e51b81526004016108169061347f565b60068054821515600160b01b0260ff60b01b199091161790556040517fa9bfed3d98385b3777389e321dbde773cf7d335fa604fefbae3dca93564f55869061086990831515815260200190565b60055460009061215e90600190600160801b90046001600160801b031661373a565b905090565b6001600160801b038116600090815260096020526040902060609061218790612ede565b92915050565b6000546001600160a01b031633146121b75760405162461bcd60e51b81526004016108169061347f565b6121c08261103a565b6121c981611252565b600580546001600160801b0316600160801b1790556121ef678ac7230489e800006114c4565b612201686c6b935b8bbd40000061095c565b61220f642e90edd0006107ec565b61221a61c350610874565b611d48600a6111d5565b6000546001600160a01b0316331461224e5760405162461bcd60e51b81526004016108169061347f565b6001600160a01b0381166122b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610816565b61103781612b79565b600060608361ffff1667ffffffffffffffff8111156122dd576122dd613688565b604051908082528060200260200182016040528015612306578160200160208202803683370190505b506001600160801b03841660009081526009602052604081209192508061232c83612eeb565b905060005b8181101561245c5760006123458583612ef5565b6001600160a01b0381166000818152600a602090815260408083208151608081018352815481526001820154818501526002909101546001600160801b0380821683850152600160801b90910481166060830152948452600b909252822054600554949550909391929190911610156123d6576001600160a01b0383166000908152600b60205260409020546123e3565b6005546001600160801b03165b90506123ef8282612f01565b1561242f5782888761ffff168151811061240b5761240b61354e565b6001600160a01b039092166020928302919091019091015261242c86613762565b95505b8a61ffff168661ffff16106124465750505061245c565b505050808061245490613783565b915050612331565b505061ffff161515959194509092505050565b600080546001600160a01b0316331461249a5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff166124c35760405162461bcd60e51b815260040161081690613564565b6002600154036124e55760405162461bcd60e51b815260040161081690613517565b60026001556006805460ff60a81b19169055600554604051600160801b9091046001600160801b0316907f95bed6fbde15e474e4ad8a6d2aaa4a759e6e383d33f8de7c945369167ebf849090600090a26005805460109061255590600160801b90046001600160801b031661379c565b91906101000a8154816001600160801b0302191690836001600160801b031602179055506000600c5490506000600c819055506125b061259d6000546001600160a01b031690565b6002546001600160a01b03169083612afb565b5050600180805590565b600654600090600160a81b900460ff166125e657600554600160801b90046001600160801b0316612604565b60055461260490600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600190526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561268a5761268a613229565b021790555050506001600160a01b0382166000908152600a60209081526040808320815160808101835281548152600182015493810193909352600201546001600160801b0380821692840192909252600160801b90041660608201819052909103612756576040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b038a168552600a909352949092209251835590516001830155915191516001600160801b03908116600160801b029216919091176002909101555b6040516001600160801b038316906001600160a01b038516907f197eaede07bece72c8e0d907669d15a7f24328f239a5f1c28ccefc94bfadb35890600090a3505050565b6005546001600160801b0390811690831610156127e45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b6001600160a01b0381161580159061280557506001600160a01b0381163014155b61283c5760405162461bcd60e51b815260206004820152600860248201526723261d229699181960c11b6044820152606401610816565b6040805180820182526001600160801b0384168082526001600160a01b0384811660208085018281528984166000818152600b8452889020965187559051600190960180546001600160a01b031916969094169590951790925584519283529082015290917fec42a6c8c2a3b9298ec01f8c989a25ba1341377172e59d478ac6780a89451634910160405180910390a2505050565b60016001600160a01b03821660009081526007602052604090206001015460ff16600281111561290357612903613229565b146129205760405162461bcd60e51b81526004016108169061359f565b6001600160a01b0381166000908152600a60209081526040918290208251608081018452815481526001808301549382019390935260028201546001600160801b0380821695830195909552600160801b900490931660608401529161298591612f01565b6129bc5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303760c01b6044820152606401610816565b60055460028201546000916001600160801b03600160801b918290048116919092049091161015612a0357600182015482546129f891906135c1565b600083559050612a0a565b5060018101545b60006001838101829055600554600285018054600160801b9092046001600160801b03166001600160801b03199092169190911790556001600160a01b038581168352600b6020908152604093849020845180860190955280548552909201541690820181905284919015612a8157806020015191505b600254612a98906001600160a01b03168385612afb565b600554604080518581526001600160a01b0385811660208301523393600160801b90046001600160801b031692908916917f81c1b0e2611c67c291f656df4c6cd2c85bf255152046acdccd8df8a5ee303456910160405180910390a45050505050565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612b735760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610816565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006546000908190620f424090612bec90600160801b900462ffffff16826137b8565b612bfb9062ffffff16856137d4565b612c0591906137f3565b9150612c118284613671565b9050915091565b600454612c2590836135c1565b83608001511015612c635760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b806001600160a01b031683606001516001600160a01b031603612cb35760405162461bcd60e51b815260206004820152600860248201526711930e914b4c8c0d60c21b6044820152606401610816565b608083015160025460608501516040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015612d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613586565b1015612d635760405162461bcd60e51b815260206004820152600860248201526723261d229699181b60c11b6044820152606401610816565b60608301516080840151600254610a5a926001600160a01b03909116913090612f51565b60608101516080820151600254611037926001600160a01b0390911691612afb565b6000612dbe836001600160a01b038416612fdb565b9392505050565b80471015612e155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610816565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e62576040519150601f19603f3d011682016040523d82523d6000602084013e612e67565b606091505b5050905080610a5a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610816565b60606000612dbe8361302a565b6000612187825490565b6000612dbe8383613086565b6000818360200151101580612dbe5750602083015183518391612f23916135c1565b10158015612dbe575060055460608401516001600160801b03600160801b9092048216911610905092915050565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080612fd45760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610816565b5050505050565b600081815260018301602052604081205461302257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612187565b506000612187565b60608160000180548060200260200160405190810160405280929190818152602001828054801561307a57602002820191906000526020600020905b815481526020019060010190808311613066575b50505050509050919050565b600082600001828154811061309d5761309d61354e565b9060005260206000200154905092915050565b80356001600160801b03811681146130c757600080fd5b919050565b6000602082840312156130de57600080fd5b612dbe826130b0565b6001600160a01b038116811461103757600080fd5b80356130c7816130e7565b60006020828403121561311957600080fd5b8135612dbe816130e7565b60006020828403121561313657600080fd5b813562ffffff81168114612dbe57600080fd5b60006020828403121561315b57600080fd5b81358015158114612dbe57600080fd5b60008060006060848603121561318057600080fd5b833561318b816130e7565b9250613199602085016130b0565b915060408401356131a9816130e7565b809150509250925092565b600080602083850312156131c757600080fd5b823567ffffffffffffffff808211156131df57600080fd5b818501915085601f8301126131f357600080fd5b81358181111561320257600080fd5b8660208260051b850101111561321757600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052602160045260246000fd5b60006060820190506001600160801b038084511683528060208501511660208401525060408301516003811061328557634e487b7160e01b600052602160045260246000fd5b8060408401525092915050565b600080604083850312156132a557600080fd5b82356132b0816130e7565b915060208301356132c0816130e7565b809150509250929050565b6000806000606084860312156132e057600080fd5b6132e9846130b0565b92506020840135613199816130e7565b803561ffff811681146130c757600080fd5b60006020828403121561331d57600080fd5b612dbe826132f9565b60006020828403121561333857600080fd5b5035919050565b600060a0828403121561335157600080fd5b50919050565b6000806040838503121561336a57600080fd5b6132b0836130b0565b821515815260006020604081840152835180604085015260005b818110156133a95785810183015185820160600152820161338d565b818111156133bb576000606083870101525b50601f01601f191692909201606001949350505050565b600081518084526020808501945080840160005b8381101561340b5781516001600160a01b0316875295820195908201906001016133e6565b509495945050505050565b602081526000612dbe60208301846133d2565b6000806040838503121561343c57600080fd5b613445836132f9565b9150613453602084016130b0565b90509250929050565b821515815260406020820152600061347760408301846133d2565b949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260089082015267464c3a452d33303160c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b0380831681851680830382111561350e5761350e6134d6565b01949350505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526008908201526723261d229699981960c11b604082015260600190565b60006020828403121561359857600080fd5b5051919050565b60208082526008908201526711930e914b4c4c0d60c21b604082015260600190565b600082198211156135d4576135d46134d6565b500190565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135613604816130e7565b61360e81836135d9565b50602082013561361d816130e7565b61362a81600184016135d9565b506040820135613639816130e7565b61364681600284016135d9565b506060820135613655816130e7565b61366281600384016135d9565b50608082013560048201555050565b600082821015613683576136836134d6565b500390565b634e487b7160e01b600052604160045260246000fd5b600060a082840312156136b057600080fd5b60405160a0810181811067ffffffffffffffff821117156136e157634e487b7160e01b600052604160045260246000fd5b60405282356136ef816130e7565b815260208301356136ff816130e7565b6020820152613710604084016130fc565b6040820152613721606084016130fc565b6060820152608083013560808201528091505092915050565b60006001600160801b038381169083168181101561375a5761375a6134d6565b039392505050565b600061ffff808316818103613779576137796134d6565b6001019392505050565b600060018201613795576137956134d6565b5060010190565b60006001600160801b03808316818103613779576137796134d6565b600062ffffff8381169083168181101561375a5761375a6134d6565b60008160001904831182151516156137ee576137ee6134d6565b500290565b60008261381057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c634300080f000a68656c6c6f000000000000000000000000000000000000000000000000000000", - "nonce": "0x0", - "accessList": [] - } - } - ], - "receipts": [ - { - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "from": "0x1ba0f96bf6b26df11a58553c6db9a0314938cf70", - "to": null, - "cumulativeGasUsed": "0x702167", - "gasUsed": "0x6972fd", - "contractAddress": "0xc71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "logs": [ - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000c71cf7eb2839d864f356da13ebe22883fcbc9b0f" - ], - "data": "0x", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xa", - "removed": false - }, - { - "address": "0xc71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "topics": [ - "0xa89c1a761177532f843f74a1ba026520efa520185852784cc804d057c8b96a5f" - ], - "data": "0x000000000000000000000000bed690780a7d5fd13fe29d3fdcb800733fd62245", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xb", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc9", - "0x0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270" - ], - "data": "0x", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xc", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0xf9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b4550" - ], - "data": "0x000000000000000000000000527a819db1eb0e34426297b03bae11f2f8b3a19e", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xd", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a6" - ], - "data": "0x0000000000000000000000000000000000000000000000008ac7230489e80000", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xe", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f7180272" - ], - "data": "0x00000000000000000000000000000000000000000000006c6b935b8bbd400000", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xf", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c" - ], - "data": "0x0000000000000000000000000000000000000000000000000000002e90edd000", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x10", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000c350", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x11", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0xf20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e48" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000000a", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x12", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x000000000000000000000000c71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "0x0000000000000000000000001ba0f96bf6b26df11a58553c6db9a0314938cf70" - ], - "data": "0x", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x13", - "removed": false - }, - { - "address": "0x0000000000000000000000000000000000001010", - "topics": [ - "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", - "0x0000000000000000000000000000000000000000000000000000000000001010", - "0x0000000000000000000000001ba0f96bf6b26df11a58553c6db9a0314938cf70", - "0x0000000000000000000000001efecb61a2f80aa34d3b9218b564a64d05946290" - ], - "data": "0x00000000000000000000000000000000000000000000000004cb97062e4755500000000000000000000000000000000000000000000000005367cf285c1900000000000000000000000000000000000000000000000017f7d15dd440c4be848b0000000000000000000000000000000000000000000000004e9c38222dd1aab00000000000000000000000000000000000000000000017f7d6296b46f305d9db", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x14", - "removed": false - } - ], - "status": "0x1", - "logsBloom": "0x00000040040000000000000000000000180010000000000000801000000000020040000000084000000080000000000080008000080000100000000008000000200400000000000000000000008000800001040000000000000100000000020000000000120000200000000000000800002000000004000080000000000000400000000000000000000000000000000020000000000000000000108000000000200000000000000000000000010000000040000208000000000000000000004800000100000104000001000000000000400200000000000000100000000020002000004000000000000000000000000004000001000000000000000000100000", - "type": "0x2", - "effectiveGasPrice": "0xba43b7400" - } - ], - "libraries": [], - "pending": [], - "path": "broadcast/PreProxyDeploy.s.sol/137/run-latest.json", - "returns": {}, - "timestamp": 1659051665 -} \ No newline at end of file diff --git a/broadcast/PreProxyDeploy.s.sol/137/run-1659051668.json b/broadcast/PreProxyDeploy.s.sol/137/run-1659051668.json deleted file mode 100644 index 0d1b9d1..0000000 --- a/broadcast/PreProxyDeploy.s.sol/137/run-1659051668.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "type": "CREATE", - "contractAddress": "0xc71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "tx": { - "type": "0x02", - "from": "0x1ba0f96bf6b26df11a58553c6db9a0314938cf70", - "gas": "0x89157c", - "value": "0x0", - "data": "0x608060405234801561001057600080fd5b5060405161797438038061797483398101604081905261002f91610440565b7fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80546001600160a01b031990811673b3f5503f93d5ef84b06993a1975b9d21b962892f9081179092557f2bda5adf664a0c31bf9134cad8d937629fcee52b9cefd545e0c716efa1202a518054821673527a819db1eb0e34426297b03bae11f2f8b3a19e1790557fa8c57e13d49dd6e2870c5d5f809130d4d18970dd320604381d96a20d80a714f480548216831790557fa3e343505a37a5f41b372e3722e1aa14239f74a613d1511ba6a638cac5ed8589805482169092179091557fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e08054821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790557f0cb0be258cd4e0f89ef5514ec447dd8846b0cf865c7d0d8ea82ff58a1eae81a180548216730d500b1d8e8ef31e21c99d1db9a6444d3adf12701790557f2af04f721798314fc694a46b3db9f8005ee5d928ceb0c93e438e01e3ac240ed480548216739c3c9283d3e44854697cd22d3faa240cfb0328899081179091557f7a1c85dbd356d1ede4c0e23eb93fed1980e3ae3583babceeae9b100fd153ad6e8054909216179055466000908152600160209081526040808320546002909252909120546001600160a01b039081169116806102515760405162461bcd60e51b81526020600482015260066024820152654f286f29707360d01b60448201526064015b60405180910390fd5b6001600160a01b0382166102915760405162461bcd60e51b815260206004820152600760248201526615dc985c1c195960ca1b6044820152606401610248565b61029c8383836102a4565b505050610459565b826040516102b190610433565b8190604051809103906000f59050801580156102d1573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216918217905561032a5760405162461bcd60e51b815260206004820152600a60248201526915dc9bdb99c81a5b9a5d60b21b6044820152606401610248565b6000546040516001600160a01b0390911681527fa89c1a761177532f843f74a1ba026520efa520185852784cc804d057c8b96a5f9060200160405180910390a160005460405163784d200b60e11b81526001600160a01b03848116600483015283811660248301529091169063f09a401690604401600060405180830381600087803b1580156103b957600080fd5b505af11580156103cd573d6000803e3d6000fd5b505060005460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b50505050505050565b6138f58061407f83390190565b60006020828403121561045257600080fd5b5051919050565b613c17806104686000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630e2920441461005c5780637d0464521461008c5780637f79c601146100b55780638c880723146100de57806396ca14b114610110575b600080fd5b60005461006f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61006f61009a3660046102c1565b6002602052600090815260409020546001600160a01b031681565b61006f6100c33660046102c1565b6001602052600090815260409020546001600160a01b031681565b6100f16100ec3660046102c1565b61014a565b604080516001600160a01b039093168352901515602083015201610083565b4660009081526001602090815260408083205460028352928190205481516001600160a01b03918216815293169183019190915201610083565b46600090815260016020908152604080832054600290925282205482916001600160a01b039182169116806101af5760405162461bcd60e51b81526020600482015260066024820152654f286f29707360d01b60448201526064015b60405180910390fd5b6001600160a01b0382166101ef5760405162461bcd60e51b815260206004820152600760248201526615dc985c1c195960ca1b60448201526064016101a6565b60ff60f81b308660405180602001610206906102b4565b601f1982820381018352601f90910116604081905261022891906020016102da565b6040516020818303038152906040528051906020012060405160200161028594939291906001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051601f198184030181529190528051602090910120956001600160a01b0387163b151595509350505050565b6138f58061031683390190565b6000602082840312156102d357600080fd5b5035919050565b6000825160005b818110156102fb57602081860181015185830152016102e1565b8181111561030a576000828501525b50919091019291505056fe6080604052678ac7230489e800006004557001000000000000006c6b935b8bbd400000600555600680546001600160c01b031916730a00c35000000000000000000000002e90edd0001790556000600c553480156200005d57600080fd5b50620000693362000073565b60018055620000c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61382280620000d36000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c8063715018a611610167578063d30c9952116100ce578063e70abe9211610087578063e70abe921461077c578063e9e0953f1461078f578063f09a40161461079d578063f2fde38b146107b0578063fa2e750b146107c3578063fe67a54b146107e457600080fd5b8063d30c995214610708578063db4b9dc01461071b578063db9f60ff1461072e578063dde8119f14610741578063e004f5de14610749578063e3d2400f1461075c57600080fd5b806398427177116101205780639842717714610686578063afb8327114610699578063b72ccf37146106ac578063c15ffd87146106d6578063c6e11004146106e9578063cf5303cf146106f257600080fd5b8063715018a6146105fc57806374ecaa7d146106045780637d495139146106175780637ffaa99c1461062a5780638da5cb5b1461064e5780639035b0831461067357600080fd5b80633963510b1161020b57806359a5ea75116101c457806359a5ea751461058a5780635c1a928a146105a45780635c7e9db8146105b757806360448443146105ca578063652eba9b146105e15780636b64c769146105f457600080fd5b80633963510b146104175780633bd950731461042a5780633d621e4c1461043d5780633e53ec7314610468578063501ee12614610536578063559202d51461054957600080fd5b8063219ee3941161025d578063219ee3941461037b57806326371b841461038e5780632897c4f3146103a15780632932b55e146103b457806330ccebb5146103c75780633535228c146103e757600080fd5b806303fddc0d1461029a57806306c7a236146102af57806308fe95b51461032d5780630aa0ce5c146103555780630b58e6db14610368575b600080fd5b6102ad6102a83660046130cc565b6107ec565b005b6103046102bd366004613107565b604080518082018252600080825260209182018190526001600160a01b039384168152600b8252829020825180840190935280548352600101549092169181019190915290565b60408051825181526020928301516001600160a01b031692810192909252015b60405180910390f35b60065461034290600160981b900461ffff1681565b60405161ffff9091168152602001610324565b6102ad610363366004613124565b610874565b6102ad6103763660046130cc565b61095c565b6102ad610389366004613149565b6109d4565b6102ad61039c36600461316b565b610a1c565b6102ad6103af366004613107565b610a5f565b6102ad6103c23660046131b4565b610b96565b6103da6103d5366004613107565b610d27565b604051610324919061323f565b6103fa6103f5366004613292565b610dc6565b604080519283526001600160801b03909116602083015201610324565b6102ad610425366004613107565b610e81565b6102ad610438366004613107565b611004565b600554610450906001600160801b031681565b6040516001600160801b039091168152602001610324565b6104f6610476366004613107565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600a6020908152604091829020825160808101845281548152600182015492810192909252600201546001600160801b0380821693830193909352600160801b9004909116606082015290565b604080518251815260208084015190820152828201516001600160801b039081169282019290925260609283015190911691810191909152608001610324565b6102ad610544366004613107565b61103a565b61055c6105573660046132cb565b611119565b6040805193151584526001600160a01b0390921660208401526001600160801b031690820152606001610324565b60055461045090600160801b90046001600160801b031681565b6102ad6105b236600461330b565b6111d5565b6102ad6105c5366004613107565b611252565b6105d3600c5481565b604051908152602001610324565b6102ad6105ef366004613107565b6112ca565b6102ad6113e5565b6102ad61148e565b6102ad610612366004613326565b6114c4565b6102ad61062536600461333f565b611523565b60065461063e90600160a81b900460ff1681565b6040519015158152602001610324565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610324565b6102ad610681366004613357565b611cf7565b61055c610694366004613292565b611d4c565b6102ad6106a7366004613326565b611d70565b6006546106c290600160801b900462ffffff1681565b60405162ffffff9091168152602001610324565b6102ad6106e4366004613107565b611e43565b6105d360045481565b6106fa611e73565b604051610324929190613373565b6102ad610716366004613107565b611f81565b600654610450906001600160801b031681565b6102ad61073c366004613149565b6120c5565b61045061213c565b60025461065b906001600160a01b031681565b61076f61076a3660046130cc565b612163565b6040516103249190613416565b60035461065b906001600160a01b031681565b6104506001600160801b0381565b6102ad6107ab366004613292565b61218d565b6102ad6107be366004613107565b612224565b6107d66107d1366004613429565b6122bc565b60405161032492919061345c565b61063e61246f565b6000546001600160a01b0316331461081f5760405162461bcd60e51b81526004016108169061347f565b60405180910390fd5b600680546001600160801b0319166001600160801b0383169081179091556040519081527f256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c906020015b60405180910390a150565b6000546001600160a01b0316331461089e5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156108c85760405162461bcd60e51b8152600401610816906134b4565b620f42408162ffffff161061090a5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313360c01b6044820152606401610816565b6006805462ffffff60801b1916600160801b62ffffff8416908102919091179091556040519081527f255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda90602001610869565b6000546001600160a01b031633146109865760405162461bcd60e51b81526004016108169061347f565b600580546001600160801b0319166001600160801b0383169081179091556040519081527f516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f718027290602001610869565b6000546001600160a01b031633146109fe5760405162461bcd60e51b81526004016108169061347f565b60068054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016108169061347f565b610a4f836125ba565b610a5a83838361279a565b505050565b6000546001600160a01b03163314610a895760405162461bcd60e51b81526004016108169061347f565b6001600160a01b03811660009081526007602052604090206002600182015460ff166002811115610abc57610abc613229565b14610af45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b600654600090600160a81b900460ff16610b2057600554600160801b90046001600160801b0316610b3e565b600554610b3e90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f6b4dbdf55669f6c01188b405d3882517d953fb610502150c0720131e879f876e90600090a3505050565b600260015403610bb85760405162461bcd60e51b815260040161081690613517565b60026001556003546001600160a01b03163314610c025760405162461bcd60e51b815260206004820152600860248201526723261d229698981b60c11b6044820152606401610816565b600654600160b81b900460ff16158015610c265750600654600160b01b900460ff16155b610c5d5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6006546001600160801b03163a1115610ca35760405162461bcd60e51b8152602060048201526008602482015267464c3a452d33303760c01b6044820152606401610816565b8060005b81811015610d1d576000848483818110610cc357610cc361354e565b9050602002016020810190610cd89190613107565b6001600160a01b031614610d1557610d15848483818110610cfb57610cfb61354e565b9050602002016020810190610d109190613107565b6128d1565b600101610ca7565b5050600180555050565b610d4860408051606081018252600080825260208201819052909182015290565b6001600160a01b038216600090815260076020908152604091829020825160608101845281546001600160801b038082168352600160801b90910416928101929092526001810154919290919083019060ff166002811115610dac57610dac613229565b6002811115610dbd57610dbd613229565b90525092915050565b6006546000908190600160a81b900460ff16610df45760405162461bcd60e51b815260040161081690613564565b5050600554600160801b90046001600160801b031660008181526008602090815260408083206001600160a01b0396871684528252808320948616835293815290839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093526003830154909316606084015260049091015460809092018290529091565b6000546001600160a01b03163314610eab5760405162461bcd60e51b81526004016108169061347f565b600260015403610ecd5760405162461bcd60e51b815260040161081690613517565b60026001819055546001600160a01b0390811690821603610f1b5760405162461bcd60e51b815260206004820152600860248201526723261d229698981960c11b6044820152606401610816565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190613586565b90508015610ffb57610fb6610fa56000546001600160a01b031690565b6001600160a01b0384169083612afb565b6000546040518281526001600160a01b039091169030907f6c9d637297625e945b296ff73a71fcfbd0a9e062652b6491a921c4c60194176b9060200160405180910390a35b50506001805550565b6000546001600160a01b0316331461102e5760405162461bcd60e51b81526004016108169061347f565b611037816125ba565b50565b6000546001600160a01b031633146110645760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff161561108e5760405162461bcd60e51b8152600401610816906134b4565b6001600160a01b0381166110cf5760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3030360c41b6044820152606401610816565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc990600090a250565b600554600090819081906001600160801b03600160801b9091048116908716106111705760405162461bcd60e51b8152602060048201526008602482015267464c2d453a32303160c01b6044820152606401610816565b6001600160801b03861660009081526008602090815260408083206001600160a01b03808a1685529083528184208882168552909252909120600201541680156111c2576001935091508590506111cc565b6000935091508590505b93509350939050565b6000546001600160a01b031633146111ff5760405162461bcd60e51b81526004016108169061347f565b6006805461ffff60981b1916600160981b61ffff8481168202929092179283905560405192041681527ff20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e4890602001610869565b6000546001600160a01b0316331461127c5760405162461bcd60e51b81526004016108169061347f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b455090602001610869565b6000546001600160a01b031633146112f45760405162461bcd60e51b81526004016108169061347f565b6001600160a01b038116600090815260076020526040902060018082015460ff16600281111561132657611326613229565b146113435760405162461bcd60e51b81526004016108169061359f565b600654600090600160a81b900460ff1661136f57600554600160801b90046001600160801b031661138d565b60055461138d90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f50b47e81a29bef5bc0c09d99b7ac8fc76d78e6b3c3590301827bd4b67bc8840990600090a3505050565b6000546001600160a01b0316331461140f5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156114395760405162461bcd60e51b8152600401610816906134b4565b60068054600160a81b60ff60a81b19909116179055600554604051600160801b9091046001600160801b0316907f38b040053f48d9e3c983bb3a552b8323820ff833ceb2534f3099c195b105cc6c90600090a2565b6000546001600160a01b031633146114b85760405162461bcd60e51b81526004016108169061347f565b6114c26000612b79565b565b6000546001600160a01b031633146114ee5760405162461bcd60e51b81526004016108169061347f565b60048190556040518181527f7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a690602001610869565b600654600160a81b900460ff1661154c5760405162461bcd60e51b815260040161081690613564565b600654600160b01b900460ff16156115915760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6002600154036115b35760405162461bcd60e51b815260040161081690613517565b60026001556115c86080820160608301613107565b6001600160a01b0316336001600160a01b0316146116135760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303360c01b6044820152606401610816565b60006007816116256020850185613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561168657611686613229565b600281111561169757611697613229565b905250905060006007816116b16040860160208701613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561171257611712613229565b600281111561172357611723613229565b905250905060018260400151600281111561174057611740613229565b1461175d5760405162461bcd60e51b81526004016108169061359f565b60028160400151600281111561177557611775613229565b146117ad5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b60055460208301516001600160801b03600160801b90920482169116116118015760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303960c01b6044820152606401610816565b60055460208201516001600160801b03600160801b90920482169116116118555760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3231360c41b6044820152606401610816565b60055482516001600160801b03600160801b9092048216911611156118a75760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313160c01b6044820152606401610816565b60055481516001600160801b03600160801b9092048216911611156118f95760405162461bcd60e51b815260206004820152600860248201526723261d229699189960c11b6044820152606401610816565b600554600160801b90046001600160801b03166000908152600860209081526040822090829061192b90870187613107565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906119609190613107565b6001600160a01b03908116825260208083019390935260409182016000908120835160a0810185528154841681526001820154841681870152600282015484169481019490945260038101549092166060840152600490910154608083015290925090600a9082906119d490880188613107565b6001600160a01b0316815260208101919091526040016000206005546002820154919250600160801b918290046001600160801b03908116929091041614801590611a1f5750805415155b15611a44578054600182018054600090611a3a9084906135c1565b9091555050600081555b600554600160801b90046001600160801b03166000908152600860209081526040822087929091611a7790840184613107565b6001600160a01b03166001600160a01b031681526020019081526020016000206000876020016020810190611aac9190613107565b6001600160a01b031681526020810191909152604001600020611acf82826135f9565b5050608082015115611b6d57600080611aeb8460800151612bc9565b91509150600080611aff8960800135612bc9565b915091508281600c54611b1291906135c1565b611b1c9190613671565b600c5584548490611b2e9084906135c1565b611b389190613671565b8555611b5b611b4c368b90038b018b61369e565b87608001518860600151612c18565b611b6486612d87565b50505050611c1d565b6005546002820154600160801b918290046001600160801b03908116929091041614611bbb576005546002820180546001600160801b03600160801b93849004811690930292169190911790555b600080611bcb8760800135612bc9565b9150915080600c6000828254611be191906135c1565b9091555050825482908490600090611bfa9084906135c1565b90915550611c1a9050611c123689900389018961369e565b600080612c18565b50505b611c54611c2d6020870187613107565b600554600160801b90046001600160801b0316600090815260096020526040902090612da9565b50600554600160801b90046001600160801b0316611c786040870160208801613107565b6001600160a01b0316611c8e6020880188613107565b6001600160a01b03167fed843d47bb78802ebc13e8996623a126d58b999326562053c253db476fb522fa611cc860608a0160408b01613107565b604080516001600160a01b03909216825260808b013560208301520160405180910390a4505060018055505050565b60013360009081526007602052604090206001015460ff166002811115611d2057611d20613229565b14611d3d5760405162461bcd60e51b81526004016108169061359f565b611d4833838361279a565b5050565b6000806000611d63611d5c61213c565b8686611119565b9250925092509250925092565b6000546001600160a01b03163314611d9a5760405162461bcd60e51b81526004016108169061347f565b600260015403611dbc5760405162461bcd60e51b815260040161081690613517565b6002600155478111611e3c57611ded81611dde6000546001600160a01b031690565b6001600160a01b031690612dc5565b6000546001600160a01b03166001600160a01b03167f90881b74cde864d3a0b48a1be016fa7c3217b5dc2b02f4f65544ff1dfa92196982604051611e3391815260200190565b60405180910390a25b5060018055565b600260015403611e655760405162461bcd60e51b815260040161081690613517565b6002600155611e3c816128d1565b600654600090606090600160b81b900460ff1680611e9a5750600654600160b01b900460ff165b80611eaf57506006546001600160801b03163a115b15611ec95750506040805160208101909152600080825291565b6006546005546000935083918291611f0391600160981b900461ffff16906107d190600190600160801b90046001600160801b031661373a565b915091508115611f6557604051600194506314995aaf60e11b90611f2b908390602401613416565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152939492505050565b6000604051806020016040528060008152509350935050509091565b6000546001600160a01b03163314611fab5760405162461bcd60e51b81526004016108169061347f565b600654600090600160a81b900460ff16611fd757600554600160801b90046001600160801b0316611ff5565b600554611ff590600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600290526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561207b5761207b613229565b0217905550506040516001600160801b03831691506001600160a01b038416907f8bbd4ebefde66f702715e863992cd517982ed361339dc6b787ed8b397213fc4b90600090a35050565b6000546001600160a01b031633146120ef5760405162461bcd60e51b81526004016108169061347f565b60068054821515600160b01b0260ff60b01b199091161790556040517fa9bfed3d98385b3777389e321dbde773cf7d335fa604fefbae3dca93564f55869061086990831515815260200190565b60055460009061215e90600190600160801b90046001600160801b031661373a565b905090565b6001600160801b038116600090815260096020526040902060609061218790612ede565b92915050565b6000546001600160a01b031633146121b75760405162461bcd60e51b81526004016108169061347f565b6121c08261103a565b6121c981611252565b600580546001600160801b0316600160801b1790556121ef678ac7230489e800006114c4565b612201686c6b935b8bbd40000061095c565b61220f642e90edd0006107ec565b61221a61c350610874565b611d48600a6111d5565b6000546001600160a01b0316331461224e5760405162461bcd60e51b81526004016108169061347f565b6001600160a01b0381166122b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610816565b61103781612b79565b600060608361ffff1667ffffffffffffffff8111156122dd576122dd613688565b604051908082528060200260200182016040528015612306578160200160208202803683370190505b506001600160801b03841660009081526009602052604081209192508061232c83612eeb565b905060005b8181101561245c5760006123458583612ef5565b6001600160a01b0381166000818152600a602090815260408083208151608081018352815481526001820154818501526002909101546001600160801b0380821683850152600160801b90910481166060830152948452600b909252822054600554949550909391929190911610156123d6576001600160a01b0383166000908152600b60205260409020546123e3565b6005546001600160801b03165b90506123ef8282612f01565b1561242f5782888761ffff168151811061240b5761240b61354e565b6001600160a01b039092166020928302919091019091015261242c86613762565b95505b8a61ffff168661ffff16106124465750505061245c565b505050808061245490613783565b915050612331565b505061ffff161515959194509092505050565b600080546001600160a01b0316331461249a5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff166124c35760405162461bcd60e51b815260040161081690613564565b6002600154036124e55760405162461bcd60e51b815260040161081690613517565b60026001556006805460ff60a81b19169055600554604051600160801b9091046001600160801b0316907f95bed6fbde15e474e4ad8a6d2aaa4a759e6e383d33f8de7c945369167ebf849090600090a26005805460109061255590600160801b90046001600160801b031661379c565b91906101000a8154816001600160801b0302191690836001600160801b031602179055506000600c5490506000600c819055506125b061259d6000546001600160a01b031690565b6002546001600160a01b03169083612afb565b5050600180805590565b600654600090600160a81b900460ff166125e657600554600160801b90046001600160801b0316612604565b60055461260490600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600190526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561268a5761268a613229565b021790555050506001600160a01b0382166000908152600a60209081526040808320815160808101835281548152600182015493810193909352600201546001600160801b0380821692840192909252600160801b90041660608201819052909103612756576040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b038a168552600a909352949092209251835590516001830155915191516001600160801b03908116600160801b029216919091176002909101555b6040516001600160801b038316906001600160a01b038516907f197eaede07bece72c8e0d907669d15a7f24328f239a5f1c28ccefc94bfadb35890600090a3505050565b6005546001600160801b0390811690831610156127e45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b6001600160a01b0381161580159061280557506001600160a01b0381163014155b61283c5760405162461bcd60e51b815260206004820152600860248201526723261d229699181960c11b6044820152606401610816565b6040805180820182526001600160801b0384168082526001600160a01b0384811660208085018281528984166000818152600b8452889020965187559051600190960180546001600160a01b031916969094169590951790925584519283529082015290917fec42a6c8c2a3b9298ec01f8c989a25ba1341377172e59d478ac6780a89451634910160405180910390a2505050565b60016001600160a01b03821660009081526007602052604090206001015460ff16600281111561290357612903613229565b146129205760405162461bcd60e51b81526004016108169061359f565b6001600160a01b0381166000908152600a60209081526040918290208251608081018452815481526001808301549382019390935260028201546001600160801b0380821695830195909552600160801b900490931660608401529161298591612f01565b6129bc5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303760c01b6044820152606401610816565b60055460028201546000916001600160801b03600160801b918290048116919092049091161015612a0357600182015482546129f891906135c1565b600083559050612a0a565b5060018101545b60006001838101829055600554600285018054600160801b9092046001600160801b03166001600160801b03199092169190911790556001600160a01b038581168352600b6020908152604093849020845180860190955280548552909201541690820181905284919015612a8157806020015191505b600254612a98906001600160a01b03168385612afb565b600554604080518581526001600160a01b0385811660208301523393600160801b90046001600160801b031692908916917f81c1b0e2611c67c291f656df4c6cd2c85bf255152046acdccd8df8a5ee303456910160405180910390a45050505050565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612b735760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610816565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006546000908190620f424090612bec90600160801b900462ffffff16826137b8565b612bfb9062ffffff16856137d4565b612c0591906137f3565b9150612c118284613671565b9050915091565b600454612c2590836135c1565b83608001511015612c635760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b806001600160a01b031683606001516001600160a01b031603612cb35760405162461bcd60e51b815260206004820152600860248201526711930e914b4c8c0d60c21b6044820152606401610816565b608083015160025460608501516040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015612d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613586565b1015612d635760405162461bcd60e51b815260206004820152600860248201526723261d229699181b60c11b6044820152606401610816565b60608301516080840151600254610a5a926001600160a01b03909116913090612f51565b60608101516080820151600254611037926001600160a01b0390911691612afb565b6000612dbe836001600160a01b038416612fdb565b9392505050565b80471015612e155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610816565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e62576040519150601f19603f3d011682016040523d82523d6000602084013e612e67565b606091505b5050905080610a5a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610816565b60606000612dbe8361302a565b6000612187825490565b6000612dbe8383613086565b6000818360200151101580612dbe5750602083015183518391612f23916135c1565b10158015612dbe575060055460608401516001600160801b03600160801b9092048216911610905092915050565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080612fd45760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610816565b5050505050565b600081815260018301602052604081205461302257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612187565b506000612187565b60608160000180548060200260200160405190810160405280929190818152602001828054801561307a57602002820191906000526020600020905b815481526020019060010190808311613066575b50505050509050919050565b600082600001828154811061309d5761309d61354e565b9060005260206000200154905092915050565b80356001600160801b03811681146130c757600080fd5b919050565b6000602082840312156130de57600080fd5b612dbe826130b0565b6001600160a01b038116811461103757600080fd5b80356130c7816130e7565b60006020828403121561311957600080fd5b8135612dbe816130e7565b60006020828403121561313657600080fd5b813562ffffff81168114612dbe57600080fd5b60006020828403121561315b57600080fd5b81358015158114612dbe57600080fd5b60008060006060848603121561318057600080fd5b833561318b816130e7565b9250613199602085016130b0565b915060408401356131a9816130e7565b809150509250925092565b600080602083850312156131c757600080fd5b823567ffffffffffffffff808211156131df57600080fd5b818501915085601f8301126131f357600080fd5b81358181111561320257600080fd5b8660208260051b850101111561321757600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052602160045260246000fd5b60006060820190506001600160801b038084511683528060208501511660208401525060408301516003811061328557634e487b7160e01b600052602160045260246000fd5b8060408401525092915050565b600080604083850312156132a557600080fd5b82356132b0816130e7565b915060208301356132c0816130e7565b809150509250929050565b6000806000606084860312156132e057600080fd5b6132e9846130b0565b92506020840135613199816130e7565b803561ffff811681146130c757600080fd5b60006020828403121561331d57600080fd5b612dbe826132f9565b60006020828403121561333857600080fd5b5035919050565b600060a0828403121561335157600080fd5b50919050565b6000806040838503121561336a57600080fd5b6132b0836130b0565b821515815260006020604081840152835180604085015260005b818110156133a95785810183015185820160600152820161338d565b818111156133bb576000606083870101525b50601f01601f191692909201606001949350505050565b600081518084526020808501945080840160005b8381101561340b5781516001600160a01b0316875295820195908201906001016133e6565b509495945050505050565b602081526000612dbe60208301846133d2565b6000806040838503121561343c57600080fd5b613445836132f9565b9150613453602084016130b0565b90509250929050565b821515815260406020820152600061347760408301846133d2565b949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260089082015267464c3a452d33303160c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b0380831681851680830382111561350e5761350e6134d6565b01949350505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526008908201526723261d229699981960c11b604082015260600190565b60006020828403121561359857600080fd5b5051919050565b60208082526008908201526711930e914b4c4c0d60c21b604082015260600190565b600082198211156135d4576135d46134d6565b500190565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135613604816130e7565b61360e81836135d9565b50602082013561361d816130e7565b61362a81600184016135d9565b506040820135613639816130e7565b61364681600284016135d9565b506060820135613655816130e7565b61366281600384016135d9565b50608082013560048201555050565b600082821015613683576136836134d6565b500390565b634e487b7160e01b600052604160045260246000fd5b600060a082840312156136b057600080fd5b60405160a0810181811067ffffffffffffffff821117156136e157634e487b7160e01b600052604160045260246000fd5b60405282356136ef816130e7565b815260208301356136ff816130e7565b6020820152613710604084016130fc565b6040820152613721606084016130fc565b6060820152608083013560808201528091505092915050565b60006001600160801b038381169083168181101561375a5761375a6134d6565b039392505050565b600061ffff808316818103613779576137796134d6565b6001019392505050565b600060018201613795576137956134d6565b5060010190565b60006001600160801b03808316818103613779576137796134d6565b600062ffffff8381169083168181101561375a5761375a6134d6565b60008160001904831182151516156137ee576137ee6134d6565b500290565b60008261381057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c634300080f000aa164736f6c634300080f000a6080604052678ac7230489e800006004557001000000000000006c6b935b8bbd400000600555600680546001600160c01b031916730a00c35000000000000000000000002e90edd0001790556000600c553480156200005d57600080fd5b50620000693362000073565b60018055620000c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61382280620000d36000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c8063715018a611610167578063d30c9952116100ce578063e70abe9211610087578063e70abe921461077c578063e9e0953f1461078f578063f09a40161461079d578063f2fde38b146107b0578063fa2e750b146107c3578063fe67a54b146107e457600080fd5b8063d30c995214610708578063db4b9dc01461071b578063db9f60ff1461072e578063dde8119f14610741578063e004f5de14610749578063e3d2400f1461075c57600080fd5b806398427177116101205780639842717714610686578063afb8327114610699578063b72ccf37146106ac578063c15ffd87146106d6578063c6e11004146106e9578063cf5303cf146106f257600080fd5b8063715018a6146105fc57806374ecaa7d146106045780637d495139146106175780637ffaa99c1461062a5780638da5cb5b1461064e5780639035b0831461067357600080fd5b80633963510b1161020b57806359a5ea75116101c457806359a5ea751461058a5780635c1a928a146105a45780635c7e9db8146105b757806360448443146105ca578063652eba9b146105e15780636b64c769146105f457600080fd5b80633963510b146104175780633bd950731461042a5780633d621e4c1461043d5780633e53ec7314610468578063501ee12614610536578063559202d51461054957600080fd5b8063219ee3941161025d578063219ee3941461037b57806326371b841461038e5780632897c4f3146103a15780632932b55e146103b457806330ccebb5146103c75780633535228c146103e757600080fd5b806303fddc0d1461029a57806306c7a236146102af57806308fe95b51461032d5780630aa0ce5c146103555780630b58e6db14610368575b600080fd5b6102ad6102a83660046130cc565b6107ec565b005b6103046102bd366004613107565b604080518082018252600080825260209182018190526001600160a01b039384168152600b8252829020825180840190935280548352600101549092169181019190915290565b60408051825181526020928301516001600160a01b031692810192909252015b60405180910390f35b60065461034290600160981b900461ffff1681565b60405161ffff9091168152602001610324565b6102ad610363366004613124565b610874565b6102ad6103763660046130cc565b61095c565b6102ad610389366004613149565b6109d4565b6102ad61039c36600461316b565b610a1c565b6102ad6103af366004613107565b610a5f565b6102ad6103c23660046131b4565b610b96565b6103da6103d5366004613107565b610d27565b604051610324919061323f565b6103fa6103f5366004613292565b610dc6565b604080519283526001600160801b03909116602083015201610324565b6102ad610425366004613107565b610e81565b6102ad610438366004613107565b611004565b600554610450906001600160801b031681565b6040516001600160801b039091168152602001610324565b6104f6610476366004613107565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600a6020908152604091829020825160808101845281548152600182015492810192909252600201546001600160801b0380821693830193909352600160801b9004909116606082015290565b604080518251815260208084015190820152828201516001600160801b039081169282019290925260609283015190911691810191909152608001610324565b6102ad610544366004613107565b61103a565b61055c6105573660046132cb565b611119565b6040805193151584526001600160a01b0390921660208401526001600160801b031690820152606001610324565b60055461045090600160801b90046001600160801b031681565b6102ad6105b236600461330b565b6111d5565b6102ad6105c5366004613107565b611252565b6105d3600c5481565b604051908152602001610324565b6102ad6105ef366004613107565b6112ca565b6102ad6113e5565b6102ad61148e565b6102ad610612366004613326565b6114c4565b6102ad61062536600461333f565b611523565b60065461063e90600160a81b900460ff1681565b6040519015158152602001610324565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610324565b6102ad610681366004613357565b611cf7565b61055c610694366004613292565b611d4c565b6102ad6106a7366004613326565b611d70565b6006546106c290600160801b900462ffffff1681565b60405162ffffff9091168152602001610324565b6102ad6106e4366004613107565b611e43565b6105d360045481565b6106fa611e73565b604051610324929190613373565b6102ad610716366004613107565b611f81565b600654610450906001600160801b031681565b6102ad61073c366004613149565b6120c5565b61045061213c565b60025461065b906001600160a01b031681565b61076f61076a3660046130cc565b612163565b6040516103249190613416565b60035461065b906001600160a01b031681565b6104506001600160801b0381565b6102ad6107ab366004613292565b61218d565b6102ad6107be366004613107565b612224565b6107d66107d1366004613429565b6122bc565b60405161032492919061345c565b61063e61246f565b6000546001600160a01b0316331461081f5760405162461bcd60e51b81526004016108169061347f565b60405180910390fd5b600680546001600160801b0319166001600160801b0383169081179091556040519081527f256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c906020015b60405180910390a150565b6000546001600160a01b0316331461089e5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156108c85760405162461bcd60e51b8152600401610816906134b4565b620f42408162ffffff161061090a5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313360c01b6044820152606401610816565b6006805462ffffff60801b1916600160801b62ffffff8416908102919091179091556040519081527f255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda90602001610869565b6000546001600160a01b031633146109865760405162461bcd60e51b81526004016108169061347f565b600580546001600160801b0319166001600160801b0383169081179091556040519081527f516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f718027290602001610869565b6000546001600160a01b031633146109fe5760405162461bcd60e51b81526004016108169061347f565b60068054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016108169061347f565b610a4f836125ba565b610a5a83838361279a565b505050565b6000546001600160a01b03163314610a895760405162461bcd60e51b81526004016108169061347f565b6001600160a01b03811660009081526007602052604090206002600182015460ff166002811115610abc57610abc613229565b14610af45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b600654600090600160a81b900460ff16610b2057600554600160801b90046001600160801b0316610b3e565b600554610b3e90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f6b4dbdf55669f6c01188b405d3882517d953fb610502150c0720131e879f876e90600090a3505050565b600260015403610bb85760405162461bcd60e51b815260040161081690613517565b60026001556003546001600160a01b03163314610c025760405162461bcd60e51b815260206004820152600860248201526723261d229698981b60c11b6044820152606401610816565b600654600160b81b900460ff16158015610c265750600654600160b01b900460ff16155b610c5d5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6006546001600160801b03163a1115610ca35760405162461bcd60e51b8152602060048201526008602482015267464c3a452d33303760c01b6044820152606401610816565b8060005b81811015610d1d576000848483818110610cc357610cc361354e565b9050602002016020810190610cd89190613107565b6001600160a01b031614610d1557610d15848483818110610cfb57610cfb61354e565b9050602002016020810190610d109190613107565b6128d1565b600101610ca7565b5050600180555050565b610d4860408051606081018252600080825260208201819052909182015290565b6001600160a01b038216600090815260076020908152604091829020825160608101845281546001600160801b038082168352600160801b90910416928101929092526001810154919290919083019060ff166002811115610dac57610dac613229565b6002811115610dbd57610dbd613229565b90525092915050565b6006546000908190600160a81b900460ff16610df45760405162461bcd60e51b815260040161081690613564565b5050600554600160801b90046001600160801b031660008181526008602090815260408083206001600160a01b0396871684528252808320948616835293815290839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093526003830154909316606084015260049091015460809092018290529091565b6000546001600160a01b03163314610eab5760405162461bcd60e51b81526004016108169061347f565b600260015403610ecd5760405162461bcd60e51b815260040161081690613517565b60026001819055546001600160a01b0390811690821603610f1b5760405162461bcd60e51b815260206004820152600860248201526723261d229698981960c11b6044820152606401610816565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190613586565b90508015610ffb57610fb6610fa56000546001600160a01b031690565b6001600160a01b0384169083612afb565b6000546040518281526001600160a01b039091169030907f6c9d637297625e945b296ff73a71fcfbd0a9e062652b6491a921c4c60194176b9060200160405180910390a35b50506001805550565b6000546001600160a01b0316331461102e5760405162461bcd60e51b81526004016108169061347f565b611037816125ba565b50565b6000546001600160a01b031633146110645760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff161561108e5760405162461bcd60e51b8152600401610816906134b4565b6001600160a01b0381166110cf5760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3030360c41b6044820152606401610816565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc990600090a250565b600554600090819081906001600160801b03600160801b9091048116908716106111705760405162461bcd60e51b8152602060048201526008602482015267464c2d453a32303160c01b6044820152606401610816565b6001600160801b03861660009081526008602090815260408083206001600160a01b03808a1685529083528184208882168552909252909120600201541680156111c2576001935091508590506111cc565b6000935091508590505b93509350939050565b6000546001600160a01b031633146111ff5760405162461bcd60e51b81526004016108169061347f565b6006805461ffff60981b1916600160981b61ffff8481168202929092179283905560405192041681527ff20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e4890602001610869565b6000546001600160a01b0316331461127c5760405162461bcd60e51b81526004016108169061347f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b455090602001610869565b6000546001600160a01b031633146112f45760405162461bcd60e51b81526004016108169061347f565b6001600160a01b038116600090815260076020526040902060018082015460ff16600281111561132657611326613229565b146113435760405162461bcd60e51b81526004016108169061359f565b600654600090600160a81b900460ff1661136f57600554600160801b90046001600160801b031661138d565b60055461138d90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f50b47e81a29bef5bc0c09d99b7ac8fc76d78e6b3c3590301827bd4b67bc8840990600090a3505050565b6000546001600160a01b0316331461140f5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156114395760405162461bcd60e51b8152600401610816906134b4565b60068054600160a81b60ff60a81b19909116179055600554604051600160801b9091046001600160801b0316907f38b040053f48d9e3c983bb3a552b8323820ff833ceb2534f3099c195b105cc6c90600090a2565b6000546001600160a01b031633146114b85760405162461bcd60e51b81526004016108169061347f565b6114c26000612b79565b565b6000546001600160a01b031633146114ee5760405162461bcd60e51b81526004016108169061347f565b60048190556040518181527f7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a690602001610869565b600654600160a81b900460ff1661154c5760405162461bcd60e51b815260040161081690613564565b600654600160b01b900460ff16156115915760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6002600154036115b35760405162461bcd60e51b815260040161081690613517565b60026001556115c86080820160608301613107565b6001600160a01b0316336001600160a01b0316146116135760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303360c01b6044820152606401610816565b60006007816116256020850185613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561168657611686613229565b600281111561169757611697613229565b905250905060006007816116b16040860160208701613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561171257611712613229565b600281111561172357611723613229565b905250905060018260400151600281111561174057611740613229565b1461175d5760405162461bcd60e51b81526004016108169061359f565b60028160400151600281111561177557611775613229565b146117ad5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b60055460208301516001600160801b03600160801b90920482169116116118015760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303960c01b6044820152606401610816565b60055460208201516001600160801b03600160801b90920482169116116118555760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3231360c41b6044820152606401610816565b60055482516001600160801b03600160801b9092048216911611156118a75760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313160c01b6044820152606401610816565b60055481516001600160801b03600160801b9092048216911611156118f95760405162461bcd60e51b815260206004820152600860248201526723261d229699189960c11b6044820152606401610816565b600554600160801b90046001600160801b03166000908152600860209081526040822090829061192b90870187613107565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906119609190613107565b6001600160a01b03908116825260208083019390935260409182016000908120835160a0810185528154841681526001820154841681870152600282015484169481019490945260038101549092166060840152600490910154608083015290925090600a9082906119d490880188613107565b6001600160a01b0316815260208101919091526040016000206005546002820154919250600160801b918290046001600160801b03908116929091041614801590611a1f5750805415155b15611a44578054600182018054600090611a3a9084906135c1565b9091555050600081555b600554600160801b90046001600160801b03166000908152600860209081526040822087929091611a7790840184613107565b6001600160a01b03166001600160a01b031681526020019081526020016000206000876020016020810190611aac9190613107565b6001600160a01b031681526020810191909152604001600020611acf82826135f9565b5050608082015115611b6d57600080611aeb8460800151612bc9565b91509150600080611aff8960800135612bc9565b915091508281600c54611b1291906135c1565b611b1c9190613671565b600c5584548490611b2e9084906135c1565b611b389190613671565b8555611b5b611b4c368b90038b018b61369e565b87608001518860600151612c18565b611b6486612d87565b50505050611c1d565b6005546002820154600160801b918290046001600160801b03908116929091041614611bbb576005546002820180546001600160801b03600160801b93849004811690930292169190911790555b600080611bcb8760800135612bc9565b9150915080600c6000828254611be191906135c1565b9091555050825482908490600090611bfa9084906135c1565b90915550611c1a9050611c123689900389018961369e565b600080612c18565b50505b611c54611c2d6020870187613107565b600554600160801b90046001600160801b0316600090815260096020526040902090612da9565b50600554600160801b90046001600160801b0316611c786040870160208801613107565b6001600160a01b0316611c8e6020880188613107565b6001600160a01b03167fed843d47bb78802ebc13e8996623a126d58b999326562053c253db476fb522fa611cc860608a0160408b01613107565b604080516001600160a01b03909216825260808b013560208301520160405180910390a4505060018055505050565b60013360009081526007602052604090206001015460ff166002811115611d2057611d20613229565b14611d3d5760405162461bcd60e51b81526004016108169061359f565b611d4833838361279a565b5050565b6000806000611d63611d5c61213c565b8686611119565b9250925092509250925092565b6000546001600160a01b03163314611d9a5760405162461bcd60e51b81526004016108169061347f565b600260015403611dbc5760405162461bcd60e51b815260040161081690613517565b6002600155478111611e3c57611ded81611dde6000546001600160a01b031690565b6001600160a01b031690612dc5565b6000546001600160a01b03166001600160a01b03167f90881b74cde864d3a0b48a1be016fa7c3217b5dc2b02f4f65544ff1dfa92196982604051611e3391815260200190565b60405180910390a25b5060018055565b600260015403611e655760405162461bcd60e51b815260040161081690613517565b6002600155611e3c816128d1565b600654600090606090600160b81b900460ff1680611e9a5750600654600160b01b900460ff165b80611eaf57506006546001600160801b03163a115b15611ec95750506040805160208101909152600080825291565b6006546005546000935083918291611f0391600160981b900461ffff16906107d190600190600160801b90046001600160801b031661373a565b915091508115611f6557604051600194506314995aaf60e11b90611f2b908390602401613416565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152939492505050565b6000604051806020016040528060008152509350935050509091565b6000546001600160a01b03163314611fab5760405162461bcd60e51b81526004016108169061347f565b600654600090600160a81b900460ff16611fd757600554600160801b90046001600160801b0316611ff5565b600554611ff590600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600290526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561207b5761207b613229565b0217905550506040516001600160801b03831691506001600160a01b038416907f8bbd4ebefde66f702715e863992cd517982ed361339dc6b787ed8b397213fc4b90600090a35050565b6000546001600160a01b031633146120ef5760405162461bcd60e51b81526004016108169061347f565b60068054821515600160b01b0260ff60b01b199091161790556040517fa9bfed3d98385b3777389e321dbde773cf7d335fa604fefbae3dca93564f55869061086990831515815260200190565b60055460009061215e90600190600160801b90046001600160801b031661373a565b905090565b6001600160801b038116600090815260096020526040902060609061218790612ede565b92915050565b6000546001600160a01b031633146121b75760405162461bcd60e51b81526004016108169061347f565b6121c08261103a565b6121c981611252565b600580546001600160801b0316600160801b1790556121ef678ac7230489e800006114c4565b612201686c6b935b8bbd40000061095c565b61220f642e90edd0006107ec565b61221a61c350610874565b611d48600a6111d5565b6000546001600160a01b0316331461224e5760405162461bcd60e51b81526004016108169061347f565b6001600160a01b0381166122b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610816565b61103781612b79565b600060608361ffff1667ffffffffffffffff8111156122dd576122dd613688565b604051908082528060200260200182016040528015612306578160200160208202803683370190505b506001600160801b03841660009081526009602052604081209192508061232c83612eeb565b905060005b8181101561245c5760006123458583612ef5565b6001600160a01b0381166000818152600a602090815260408083208151608081018352815481526001820154818501526002909101546001600160801b0380821683850152600160801b90910481166060830152948452600b909252822054600554949550909391929190911610156123d6576001600160a01b0383166000908152600b60205260409020546123e3565b6005546001600160801b03165b90506123ef8282612f01565b1561242f5782888761ffff168151811061240b5761240b61354e565b6001600160a01b039092166020928302919091019091015261242c86613762565b95505b8a61ffff168661ffff16106124465750505061245c565b505050808061245490613783565b915050612331565b505061ffff161515959194509092505050565b600080546001600160a01b0316331461249a5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff166124c35760405162461bcd60e51b815260040161081690613564565b6002600154036124e55760405162461bcd60e51b815260040161081690613517565b60026001556006805460ff60a81b19169055600554604051600160801b9091046001600160801b0316907f95bed6fbde15e474e4ad8a6d2aaa4a759e6e383d33f8de7c945369167ebf849090600090a26005805460109061255590600160801b90046001600160801b031661379c565b91906101000a8154816001600160801b0302191690836001600160801b031602179055506000600c5490506000600c819055506125b061259d6000546001600160a01b031690565b6002546001600160a01b03169083612afb565b5050600180805590565b600654600090600160a81b900460ff166125e657600554600160801b90046001600160801b0316612604565b60055461260490600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600190526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561268a5761268a613229565b021790555050506001600160a01b0382166000908152600a60209081526040808320815160808101835281548152600182015493810193909352600201546001600160801b0380821692840192909252600160801b90041660608201819052909103612756576040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b038a168552600a909352949092209251835590516001830155915191516001600160801b03908116600160801b029216919091176002909101555b6040516001600160801b038316906001600160a01b038516907f197eaede07bece72c8e0d907669d15a7f24328f239a5f1c28ccefc94bfadb35890600090a3505050565b6005546001600160801b0390811690831610156127e45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b6001600160a01b0381161580159061280557506001600160a01b0381163014155b61283c5760405162461bcd60e51b815260206004820152600860248201526723261d229699181960c11b6044820152606401610816565b6040805180820182526001600160801b0384168082526001600160a01b0384811660208085018281528984166000818152600b8452889020965187559051600190960180546001600160a01b031916969094169590951790925584519283529082015290917fec42a6c8c2a3b9298ec01f8c989a25ba1341377172e59d478ac6780a89451634910160405180910390a2505050565b60016001600160a01b03821660009081526007602052604090206001015460ff16600281111561290357612903613229565b146129205760405162461bcd60e51b81526004016108169061359f565b6001600160a01b0381166000908152600a60209081526040918290208251608081018452815481526001808301549382019390935260028201546001600160801b0380821695830195909552600160801b900490931660608401529161298591612f01565b6129bc5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303760c01b6044820152606401610816565b60055460028201546000916001600160801b03600160801b918290048116919092049091161015612a0357600182015482546129f891906135c1565b600083559050612a0a565b5060018101545b60006001838101829055600554600285018054600160801b9092046001600160801b03166001600160801b03199092169190911790556001600160a01b038581168352600b6020908152604093849020845180860190955280548552909201541690820181905284919015612a8157806020015191505b600254612a98906001600160a01b03168385612afb565b600554604080518581526001600160a01b0385811660208301523393600160801b90046001600160801b031692908916917f81c1b0e2611c67c291f656df4c6cd2c85bf255152046acdccd8df8a5ee303456910160405180910390a45050505050565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612b735760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610816565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006546000908190620f424090612bec90600160801b900462ffffff16826137b8565b612bfb9062ffffff16856137d4565b612c0591906137f3565b9150612c118284613671565b9050915091565b600454612c2590836135c1565b83608001511015612c635760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b806001600160a01b031683606001516001600160a01b031603612cb35760405162461bcd60e51b815260206004820152600860248201526711930e914b4c8c0d60c21b6044820152606401610816565b608083015160025460608501516040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015612d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613586565b1015612d635760405162461bcd60e51b815260206004820152600860248201526723261d229699181b60c11b6044820152606401610816565b60608301516080840151600254610a5a926001600160a01b03909116913090612f51565b60608101516080820151600254611037926001600160a01b0390911691612afb565b6000612dbe836001600160a01b038416612fdb565b9392505050565b80471015612e155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610816565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e62576040519150601f19603f3d011682016040523d82523d6000602084013e612e67565b606091505b5050905080610a5a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610816565b60606000612dbe8361302a565b6000612187825490565b6000612dbe8383613086565b6000818360200151101580612dbe5750602083015183518391612f23916135c1565b10158015612dbe575060055460608401516001600160801b03600160801b9092048216911610905092915050565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080612fd45760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610816565b5050505050565b600081815260018301602052604081205461302257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612187565b506000612187565b60608160000180548060200260200160405190810160405280929190818152602001828054801561307a57602002820191906000526020600020905b815481526020019060010190808311613066575b50505050509050919050565b600082600001828154811061309d5761309d61354e565b9060005260206000200154905092915050565b80356001600160801b03811681146130c757600080fd5b919050565b6000602082840312156130de57600080fd5b612dbe826130b0565b6001600160a01b038116811461103757600080fd5b80356130c7816130e7565b60006020828403121561311957600080fd5b8135612dbe816130e7565b60006020828403121561313657600080fd5b813562ffffff81168114612dbe57600080fd5b60006020828403121561315b57600080fd5b81358015158114612dbe57600080fd5b60008060006060848603121561318057600080fd5b833561318b816130e7565b9250613199602085016130b0565b915060408401356131a9816130e7565b809150509250925092565b600080602083850312156131c757600080fd5b823567ffffffffffffffff808211156131df57600080fd5b818501915085601f8301126131f357600080fd5b81358181111561320257600080fd5b8660208260051b850101111561321757600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052602160045260246000fd5b60006060820190506001600160801b038084511683528060208501511660208401525060408301516003811061328557634e487b7160e01b600052602160045260246000fd5b8060408401525092915050565b600080604083850312156132a557600080fd5b82356132b0816130e7565b915060208301356132c0816130e7565b809150509250929050565b6000806000606084860312156132e057600080fd5b6132e9846130b0565b92506020840135613199816130e7565b803561ffff811681146130c757600080fd5b60006020828403121561331d57600080fd5b612dbe826132f9565b60006020828403121561333857600080fd5b5035919050565b600060a0828403121561335157600080fd5b50919050565b6000806040838503121561336a57600080fd5b6132b0836130b0565b821515815260006020604081840152835180604085015260005b818110156133a95785810183015185820160600152820161338d565b818111156133bb576000606083870101525b50601f01601f191692909201606001949350505050565b600081518084526020808501945080840160005b8381101561340b5781516001600160a01b0316875295820195908201906001016133e6565b509495945050505050565b602081526000612dbe60208301846133d2565b6000806040838503121561343c57600080fd5b613445836132f9565b9150613453602084016130b0565b90509250929050565b821515815260406020820152600061347760408301846133d2565b949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260089082015267464c3a452d33303160c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b0380831681851680830382111561350e5761350e6134d6565b01949350505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526008908201526723261d229699981960c11b604082015260600190565b60006020828403121561359857600080fd5b5051919050565b60208082526008908201526711930e914b4c4c0d60c21b604082015260600190565b600082198211156135d4576135d46134d6565b500190565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135613604816130e7565b61360e81836135d9565b50602082013561361d816130e7565b61362a81600184016135d9565b506040820135613639816130e7565b61364681600284016135d9565b506060820135613655816130e7565b61366281600384016135d9565b50608082013560048201555050565b600082821015613683576136836134d6565b500390565b634e487b7160e01b600052604160045260246000fd5b600060a082840312156136b057600080fd5b60405160a0810181811067ffffffffffffffff821117156136e157634e487b7160e01b600052604160045260246000fd5b60405282356136ef816130e7565b815260208301356136ff816130e7565b6020820152613710604084016130fc565b6040820152613721606084016130fc565b6060820152608083013560808201528091505092915050565b60006001600160801b038381169083168181101561375a5761375a6134d6565b039392505050565b600061ffff808316818103613779576137796134d6565b6001019392505050565b600060018201613795576137956134d6565b5060010190565b60006001600160801b03808316818103613779576137796134d6565b600062ffffff8381169083168181101561375a5761375a6134d6565b60008160001904831182151516156137ee576137ee6134d6565b500290565b60008261381057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c634300080f000a68656c6c6f000000000000000000000000000000000000000000000000000000", - "nonce": "0x0", - "accessList": [] - } - } - ], - "receipts": [ - { - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "from": "0x1ba0f96bf6b26df11a58553c6db9a0314938cf70", - "to": null, - "cumulativeGasUsed": "0x702167", - "gasUsed": "0x6972fd", - "contractAddress": "0xc71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "logs": [ - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000c71cf7eb2839d864f356da13ebe22883fcbc9b0f" - ], - "data": "0x", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xa", - "removed": false - }, - { - "address": "0xc71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "topics": [ - "0xa89c1a761177532f843f74a1ba026520efa520185852784cc804d057c8b96a5f" - ], - "data": "0x000000000000000000000000bed690780a7d5fd13fe29d3fdcb800733fd62245", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xb", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc9", - "0x0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270" - ], - "data": "0x", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xc", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0xf9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b4550" - ], - "data": "0x000000000000000000000000527a819db1eb0e34426297b03bae11f2f8b3a19e", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xd", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a6" - ], - "data": "0x0000000000000000000000000000000000000000000000008ac7230489e80000", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xe", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f7180272" - ], - "data": "0x00000000000000000000000000000000000000000000006c6b935b8bbd400000", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xf", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c" - ], - "data": "0x0000000000000000000000000000000000000000000000000000002e90edd000", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x10", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000c350", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x11", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0xf20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e48" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000000a", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x12", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x000000000000000000000000c71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "0x0000000000000000000000001ba0f96bf6b26df11a58553c6db9a0314938cf70" - ], - "data": "0x", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x13", - "removed": false - }, - { - "address": "0x0000000000000000000000000000000000001010", - "topics": [ - "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", - "0x0000000000000000000000000000000000000000000000000000000000001010", - "0x0000000000000000000000001ba0f96bf6b26df11a58553c6db9a0314938cf70", - "0x0000000000000000000000001efecb61a2f80aa34d3b9218b564a64d05946290" - ], - "data": "0x00000000000000000000000000000000000000000000000004cb97062e4755500000000000000000000000000000000000000000000000005367cf285c1900000000000000000000000000000000000000000000000017f7d15dd440c4be848b0000000000000000000000000000000000000000000000004e9c38222dd1aab00000000000000000000000000000000000000000000017f7d6296b46f305d9db", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x14", - "removed": false - } - ], - "status": "0x1", - "logsBloom": "0x00000040040000000000000000000000180010000000000000801000000000020040000000084000000080000000000080008000080000100000000008000000200400000000000000000000008000800001040000000000000100000000020000000000120000200000000000000800002000000004000080000000000000400000000000000000000000000000000020000000000000000000108000000000200000000000000000000000010000000040000208000000000000000000004800000100000104000001000000000000400200000000000000100000000020002000004000000000000000000000000004000001000000000000000000100000", - "type": "0x2", - "effectiveGasPrice": "0xba43b7400" - } - ], - "libraries": [], - "pending": [], - "path": "broadcast/PreProxyDeploy.s.sol/137/run-latest.json", - "returns": {}, - "timestamp": 1659051668 -} \ No newline at end of file diff --git a/broadcast/PreProxyDeploy.s.sol/137/run-1659052009.json b/broadcast/PreProxyDeploy.s.sol/137/run-1659052009.json deleted file mode 100644 index 69c312a..0000000 --- a/broadcast/PreProxyDeploy.s.sol/137/run-1659052009.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "type": "CREATE", - "contractAddress": "0xc71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "tx": { - "type": "0x02", - "from": "0x1ba0f96bf6b26df11a58553c6db9a0314938cf70", - "gas": "0x89157c", - "value": "0x0", - "data": "0x608060405234801561001057600080fd5b5060405161797438038061797483398101604081905261002f91610440565b7fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80546001600160a01b031990811673b3f5503f93d5ef84b06993a1975b9d21b962892f9081179092557f2bda5adf664a0c31bf9134cad8d937629fcee52b9cefd545e0c716efa1202a518054821673527a819db1eb0e34426297b03bae11f2f8b3a19e1790557fa8c57e13d49dd6e2870c5d5f809130d4d18970dd320604381d96a20d80a714f480548216831790557fa3e343505a37a5f41b372e3722e1aa14239f74a613d1511ba6a638cac5ed8589805482169092179091557fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e08054821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790557f0cb0be258cd4e0f89ef5514ec447dd8846b0cf865c7d0d8ea82ff58a1eae81a180548216730d500b1d8e8ef31e21c99d1db9a6444d3adf12701790557f2af04f721798314fc694a46b3db9f8005ee5d928ceb0c93e438e01e3ac240ed480548216739c3c9283d3e44854697cd22d3faa240cfb0328899081179091557f7a1c85dbd356d1ede4c0e23eb93fed1980e3ae3583babceeae9b100fd153ad6e8054909216179055466000908152600160209081526040808320546002909252909120546001600160a01b039081169116806102515760405162461bcd60e51b81526020600482015260066024820152654f286f29707360d01b60448201526064015b60405180910390fd5b6001600160a01b0382166102915760405162461bcd60e51b815260206004820152600760248201526615dc985c1c195960ca1b6044820152606401610248565b61029c8383836102a4565b505050610459565b826040516102b190610433565b8190604051809103906000f59050801580156102d1573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216918217905561032a5760405162461bcd60e51b815260206004820152600a60248201526915dc9bdb99c81a5b9a5d60b21b6044820152606401610248565b6000546040516001600160a01b0390911681527fa89c1a761177532f843f74a1ba026520efa520185852784cc804d057c8b96a5f9060200160405180910390a160005460405163784d200b60e11b81526001600160a01b03848116600483015283811660248301529091169063f09a401690604401600060405180830381600087803b1580156103b957600080fd5b505af11580156103cd573d6000803e3d6000fd5b505060005460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b50505050505050565b6138f58061407f83390190565b60006020828403121561045257600080fd5b5051919050565b613c17806104686000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630e2920441461005c5780637d0464521461008c5780637f79c601146100b55780638c880723146100de57806396ca14b114610110575b600080fd5b60005461006f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61006f61009a3660046102c1565b6002602052600090815260409020546001600160a01b031681565b61006f6100c33660046102c1565b6001602052600090815260409020546001600160a01b031681565b6100f16100ec3660046102c1565b61014a565b604080516001600160a01b039093168352901515602083015201610083565b4660009081526001602090815260408083205460028352928190205481516001600160a01b03918216815293169183019190915201610083565b46600090815260016020908152604080832054600290925282205482916001600160a01b039182169116806101af5760405162461bcd60e51b81526020600482015260066024820152654f286f29707360d01b60448201526064015b60405180910390fd5b6001600160a01b0382166101ef5760405162461bcd60e51b815260206004820152600760248201526615dc985c1c195960ca1b60448201526064016101a6565b60ff60f81b308660405180602001610206906102b4565b601f1982820381018352601f90910116604081905261022891906020016102da565b6040516020818303038152906040528051906020012060405160200161028594939291906001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051601f198184030181529190528051602090910120956001600160a01b0387163b151595509350505050565b6138f58061031683390190565b6000602082840312156102d357600080fd5b5035919050565b6000825160005b818110156102fb57602081860181015185830152016102e1565b8181111561030a576000828501525b50919091019291505056fe6080604052678ac7230489e800006004557001000000000000006c6b935b8bbd400000600555600680546001600160c01b031916730a00c35000000000000000000000002e90edd0001790556000600c553480156200005d57600080fd5b50620000693362000073565b60018055620000c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61382280620000d36000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c8063715018a611610167578063d30c9952116100ce578063e70abe9211610087578063e70abe921461077c578063e9e0953f1461078f578063f09a40161461079d578063f2fde38b146107b0578063fa2e750b146107c3578063fe67a54b146107e457600080fd5b8063d30c995214610708578063db4b9dc01461071b578063db9f60ff1461072e578063dde8119f14610741578063e004f5de14610749578063e3d2400f1461075c57600080fd5b806398427177116101205780639842717714610686578063afb8327114610699578063b72ccf37146106ac578063c15ffd87146106d6578063c6e11004146106e9578063cf5303cf146106f257600080fd5b8063715018a6146105fc57806374ecaa7d146106045780637d495139146106175780637ffaa99c1461062a5780638da5cb5b1461064e5780639035b0831461067357600080fd5b80633963510b1161020b57806359a5ea75116101c457806359a5ea751461058a5780635c1a928a146105a45780635c7e9db8146105b757806360448443146105ca578063652eba9b146105e15780636b64c769146105f457600080fd5b80633963510b146104175780633bd950731461042a5780633d621e4c1461043d5780633e53ec7314610468578063501ee12614610536578063559202d51461054957600080fd5b8063219ee3941161025d578063219ee3941461037b57806326371b841461038e5780632897c4f3146103a15780632932b55e146103b457806330ccebb5146103c75780633535228c146103e757600080fd5b806303fddc0d1461029a57806306c7a236146102af57806308fe95b51461032d5780630aa0ce5c146103555780630b58e6db14610368575b600080fd5b6102ad6102a83660046130cc565b6107ec565b005b6103046102bd366004613107565b604080518082018252600080825260209182018190526001600160a01b039384168152600b8252829020825180840190935280548352600101549092169181019190915290565b60408051825181526020928301516001600160a01b031692810192909252015b60405180910390f35b60065461034290600160981b900461ffff1681565b60405161ffff9091168152602001610324565b6102ad610363366004613124565b610874565b6102ad6103763660046130cc565b61095c565b6102ad610389366004613149565b6109d4565b6102ad61039c36600461316b565b610a1c565b6102ad6103af366004613107565b610a5f565b6102ad6103c23660046131b4565b610b96565b6103da6103d5366004613107565b610d27565b604051610324919061323f565b6103fa6103f5366004613292565b610dc6565b604080519283526001600160801b03909116602083015201610324565b6102ad610425366004613107565b610e81565b6102ad610438366004613107565b611004565b600554610450906001600160801b031681565b6040516001600160801b039091168152602001610324565b6104f6610476366004613107565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600a6020908152604091829020825160808101845281548152600182015492810192909252600201546001600160801b0380821693830193909352600160801b9004909116606082015290565b604080518251815260208084015190820152828201516001600160801b039081169282019290925260609283015190911691810191909152608001610324565b6102ad610544366004613107565b61103a565b61055c6105573660046132cb565b611119565b6040805193151584526001600160a01b0390921660208401526001600160801b031690820152606001610324565b60055461045090600160801b90046001600160801b031681565b6102ad6105b236600461330b565b6111d5565b6102ad6105c5366004613107565b611252565b6105d3600c5481565b604051908152602001610324565b6102ad6105ef366004613107565b6112ca565b6102ad6113e5565b6102ad61148e565b6102ad610612366004613326565b6114c4565b6102ad61062536600461333f565b611523565b60065461063e90600160a81b900460ff1681565b6040519015158152602001610324565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610324565b6102ad610681366004613357565b611cf7565b61055c610694366004613292565b611d4c565b6102ad6106a7366004613326565b611d70565b6006546106c290600160801b900462ffffff1681565b60405162ffffff9091168152602001610324565b6102ad6106e4366004613107565b611e43565b6105d360045481565b6106fa611e73565b604051610324929190613373565b6102ad610716366004613107565b611f81565b600654610450906001600160801b031681565b6102ad61073c366004613149565b6120c5565b61045061213c565b60025461065b906001600160a01b031681565b61076f61076a3660046130cc565b612163565b6040516103249190613416565b60035461065b906001600160a01b031681565b6104506001600160801b0381565b6102ad6107ab366004613292565b61218d565b6102ad6107be366004613107565b612224565b6107d66107d1366004613429565b6122bc565b60405161032492919061345c565b61063e61246f565b6000546001600160a01b0316331461081f5760405162461bcd60e51b81526004016108169061347f565b60405180910390fd5b600680546001600160801b0319166001600160801b0383169081179091556040519081527f256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c906020015b60405180910390a150565b6000546001600160a01b0316331461089e5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156108c85760405162461bcd60e51b8152600401610816906134b4565b620f42408162ffffff161061090a5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313360c01b6044820152606401610816565b6006805462ffffff60801b1916600160801b62ffffff8416908102919091179091556040519081527f255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda90602001610869565b6000546001600160a01b031633146109865760405162461bcd60e51b81526004016108169061347f565b600580546001600160801b0319166001600160801b0383169081179091556040519081527f516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f718027290602001610869565b6000546001600160a01b031633146109fe5760405162461bcd60e51b81526004016108169061347f565b60068054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016108169061347f565b610a4f836125ba565b610a5a83838361279a565b505050565b6000546001600160a01b03163314610a895760405162461bcd60e51b81526004016108169061347f565b6001600160a01b03811660009081526007602052604090206002600182015460ff166002811115610abc57610abc613229565b14610af45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b600654600090600160a81b900460ff16610b2057600554600160801b90046001600160801b0316610b3e565b600554610b3e90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f6b4dbdf55669f6c01188b405d3882517d953fb610502150c0720131e879f876e90600090a3505050565b600260015403610bb85760405162461bcd60e51b815260040161081690613517565b60026001556003546001600160a01b03163314610c025760405162461bcd60e51b815260206004820152600860248201526723261d229698981b60c11b6044820152606401610816565b600654600160b81b900460ff16158015610c265750600654600160b01b900460ff16155b610c5d5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6006546001600160801b03163a1115610ca35760405162461bcd60e51b8152602060048201526008602482015267464c3a452d33303760c01b6044820152606401610816565b8060005b81811015610d1d576000848483818110610cc357610cc361354e565b9050602002016020810190610cd89190613107565b6001600160a01b031614610d1557610d15848483818110610cfb57610cfb61354e565b9050602002016020810190610d109190613107565b6128d1565b600101610ca7565b5050600180555050565b610d4860408051606081018252600080825260208201819052909182015290565b6001600160a01b038216600090815260076020908152604091829020825160608101845281546001600160801b038082168352600160801b90910416928101929092526001810154919290919083019060ff166002811115610dac57610dac613229565b6002811115610dbd57610dbd613229565b90525092915050565b6006546000908190600160a81b900460ff16610df45760405162461bcd60e51b815260040161081690613564565b5050600554600160801b90046001600160801b031660008181526008602090815260408083206001600160a01b0396871684528252808320948616835293815290839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093526003830154909316606084015260049091015460809092018290529091565b6000546001600160a01b03163314610eab5760405162461bcd60e51b81526004016108169061347f565b600260015403610ecd5760405162461bcd60e51b815260040161081690613517565b60026001819055546001600160a01b0390811690821603610f1b5760405162461bcd60e51b815260206004820152600860248201526723261d229698981960c11b6044820152606401610816565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190613586565b90508015610ffb57610fb6610fa56000546001600160a01b031690565b6001600160a01b0384169083612afb565b6000546040518281526001600160a01b039091169030907f6c9d637297625e945b296ff73a71fcfbd0a9e062652b6491a921c4c60194176b9060200160405180910390a35b50506001805550565b6000546001600160a01b0316331461102e5760405162461bcd60e51b81526004016108169061347f565b611037816125ba565b50565b6000546001600160a01b031633146110645760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff161561108e5760405162461bcd60e51b8152600401610816906134b4565b6001600160a01b0381166110cf5760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3030360c41b6044820152606401610816565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc990600090a250565b600554600090819081906001600160801b03600160801b9091048116908716106111705760405162461bcd60e51b8152602060048201526008602482015267464c2d453a32303160c01b6044820152606401610816565b6001600160801b03861660009081526008602090815260408083206001600160a01b03808a1685529083528184208882168552909252909120600201541680156111c2576001935091508590506111cc565b6000935091508590505b93509350939050565b6000546001600160a01b031633146111ff5760405162461bcd60e51b81526004016108169061347f565b6006805461ffff60981b1916600160981b61ffff8481168202929092179283905560405192041681527ff20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e4890602001610869565b6000546001600160a01b0316331461127c5760405162461bcd60e51b81526004016108169061347f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b455090602001610869565b6000546001600160a01b031633146112f45760405162461bcd60e51b81526004016108169061347f565b6001600160a01b038116600090815260076020526040902060018082015460ff16600281111561132657611326613229565b146113435760405162461bcd60e51b81526004016108169061359f565b600654600090600160a81b900460ff1661136f57600554600160801b90046001600160801b031661138d565b60055461138d90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f50b47e81a29bef5bc0c09d99b7ac8fc76d78e6b3c3590301827bd4b67bc8840990600090a3505050565b6000546001600160a01b0316331461140f5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156114395760405162461bcd60e51b8152600401610816906134b4565b60068054600160a81b60ff60a81b19909116179055600554604051600160801b9091046001600160801b0316907f38b040053f48d9e3c983bb3a552b8323820ff833ceb2534f3099c195b105cc6c90600090a2565b6000546001600160a01b031633146114b85760405162461bcd60e51b81526004016108169061347f565b6114c26000612b79565b565b6000546001600160a01b031633146114ee5760405162461bcd60e51b81526004016108169061347f565b60048190556040518181527f7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a690602001610869565b600654600160a81b900460ff1661154c5760405162461bcd60e51b815260040161081690613564565b600654600160b01b900460ff16156115915760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6002600154036115b35760405162461bcd60e51b815260040161081690613517565b60026001556115c86080820160608301613107565b6001600160a01b0316336001600160a01b0316146116135760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303360c01b6044820152606401610816565b60006007816116256020850185613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561168657611686613229565b600281111561169757611697613229565b905250905060006007816116b16040860160208701613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561171257611712613229565b600281111561172357611723613229565b905250905060018260400151600281111561174057611740613229565b1461175d5760405162461bcd60e51b81526004016108169061359f565b60028160400151600281111561177557611775613229565b146117ad5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b60055460208301516001600160801b03600160801b90920482169116116118015760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303960c01b6044820152606401610816565b60055460208201516001600160801b03600160801b90920482169116116118555760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3231360c41b6044820152606401610816565b60055482516001600160801b03600160801b9092048216911611156118a75760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313160c01b6044820152606401610816565b60055481516001600160801b03600160801b9092048216911611156118f95760405162461bcd60e51b815260206004820152600860248201526723261d229699189960c11b6044820152606401610816565b600554600160801b90046001600160801b03166000908152600860209081526040822090829061192b90870187613107565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906119609190613107565b6001600160a01b03908116825260208083019390935260409182016000908120835160a0810185528154841681526001820154841681870152600282015484169481019490945260038101549092166060840152600490910154608083015290925090600a9082906119d490880188613107565b6001600160a01b0316815260208101919091526040016000206005546002820154919250600160801b918290046001600160801b03908116929091041614801590611a1f5750805415155b15611a44578054600182018054600090611a3a9084906135c1565b9091555050600081555b600554600160801b90046001600160801b03166000908152600860209081526040822087929091611a7790840184613107565b6001600160a01b03166001600160a01b031681526020019081526020016000206000876020016020810190611aac9190613107565b6001600160a01b031681526020810191909152604001600020611acf82826135f9565b5050608082015115611b6d57600080611aeb8460800151612bc9565b91509150600080611aff8960800135612bc9565b915091508281600c54611b1291906135c1565b611b1c9190613671565b600c5584548490611b2e9084906135c1565b611b389190613671565b8555611b5b611b4c368b90038b018b61369e565b87608001518860600151612c18565b611b6486612d87565b50505050611c1d565b6005546002820154600160801b918290046001600160801b03908116929091041614611bbb576005546002820180546001600160801b03600160801b93849004811690930292169190911790555b600080611bcb8760800135612bc9565b9150915080600c6000828254611be191906135c1565b9091555050825482908490600090611bfa9084906135c1565b90915550611c1a9050611c123689900389018961369e565b600080612c18565b50505b611c54611c2d6020870187613107565b600554600160801b90046001600160801b0316600090815260096020526040902090612da9565b50600554600160801b90046001600160801b0316611c786040870160208801613107565b6001600160a01b0316611c8e6020880188613107565b6001600160a01b03167fed843d47bb78802ebc13e8996623a126d58b999326562053c253db476fb522fa611cc860608a0160408b01613107565b604080516001600160a01b03909216825260808b013560208301520160405180910390a4505060018055505050565b60013360009081526007602052604090206001015460ff166002811115611d2057611d20613229565b14611d3d5760405162461bcd60e51b81526004016108169061359f565b611d4833838361279a565b5050565b6000806000611d63611d5c61213c565b8686611119565b9250925092509250925092565b6000546001600160a01b03163314611d9a5760405162461bcd60e51b81526004016108169061347f565b600260015403611dbc5760405162461bcd60e51b815260040161081690613517565b6002600155478111611e3c57611ded81611dde6000546001600160a01b031690565b6001600160a01b031690612dc5565b6000546001600160a01b03166001600160a01b03167f90881b74cde864d3a0b48a1be016fa7c3217b5dc2b02f4f65544ff1dfa92196982604051611e3391815260200190565b60405180910390a25b5060018055565b600260015403611e655760405162461bcd60e51b815260040161081690613517565b6002600155611e3c816128d1565b600654600090606090600160b81b900460ff1680611e9a5750600654600160b01b900460ff165b80611eaf57506006546001600160801b03163a115b15611ec95750506040805160208101909152600080825291565b6006546005546000935083918291611f0391600160981b900461ffff16906107d190600190600160801b90046001600160801b031661373a565b915091508115611f6557604051600194506314995aaf60e11b90611f2b908390602401613416565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152939492505050565b6000604051806020016040528060008152509350935050509091565b6000546001600160a01b03163314611fab5760405162461bcd60e51b81526004016108169061347f565b600654600090600160a81b900460ff16611fd757600554600160801b90046001600160801b0316611ff5565b600554611ff590600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600290526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561207b5761207b613229565b0217905550506040516001600160801b03831691506001600160a01b038416907f8bbd4ebefde66f702715e863992cd517982ed361339dc6b787ed8b397213fc4b90600090a35050565b6000546001600160a01b031633146120ef5760405162461bcd60e51b81526004016108169061347f565b60068054821515600160b01b0260ff60b01b199091161790556040517fa9bfed3d98385b3777389e321dbde773cf7d335fa604fefbae3dca93564f55869061086990831515815260200190565b60055460009061215e90600190600160801b90046001600160801b031661373a565b905090565b6001600160801b038116600090815260096020526040902060609061218790612ede565b92915050565b6000546001600160a01b031633146121b75760405162461bcd60e51b81526004016108169061347f565b6121c08261103a565b6121c981611252565b600580546001600160801b0316600160801b1790556121ef678ac7230489e800006114c4565b612201686c6b935b8bbd40000061095c565b61220f642e90edd0006107ec565b61221a61c350610874565b611d48600a6111d5565b6000546001600160a01b0316331461224e5760405162461bcd60e51b81526004016108169061347f565b6001600160a01b0381166122b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610816565b61103781612b79565b600060608361ffff1667ffffffffffffffff8111156122dd576122dd613688565b604051908082528060200260200182016040528015612306578160200160208202803683370190505b506001600160801b03841660009081526009602052604081209192508061232c83612eeb565b905060005b8181101561245c5760006123458583612ef5565b6001600160a01b0381166000818152600a602090815260408083208151608081018352815481526001820154818501526002909101546001600160801b0380821683850152600160801b90910481166060830152948452600b909252822054600554949550909391929190911610156123d6576001600160a01b0383166000908152600b60205260409020546123e3565b6005546001600160801b03165b90506123ef8282612f01565b1561242f5782888761ffff168151811061240b5761240b61354e565b6001600160a01b039092166020928302919091019091015261242c86613762565b95505b8a61ffff168661ffff16106124465750505061245c565b505050808061245490613783565b915050612331565b505061ffff161515959194509092505050565b600080546001600160a01b0316331461249a5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff166124c35760405162461bcd60e51b815260040161081690613564565b6002600154036124e55760405162461bcd60e51b815260040161081690613517565b60026001556006805460ff60a81b19169055600554604051600160801b9091046001600160801b0316907f95bed6fbde15e474e4ad8a6d2aaa4a759e6e383d33f8de7c945369167ebf849090600090a26005805460109061255590600160801b90046001600160801b031661379c565b91906101000a8154816001600160801b0302191690836001600160801b031602179055506000600c5490506000600c819055506125b061259d6000546001600160a01b031690565b6002546001600160a01b03169083612afb565b5050600180805590565b600654600090600160a81b900460ff166125e657600554600160801b90046001600160801b0316612604565b60055461260490600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600190526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561268a5761268a613229565b021790555050506001600160a01b0382166000908152600a60209081526040808320815160808101835281548152600182015493810193909352600201546001600160801b0380821692840192909252600160801b90041660608201819052909103612756576040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b038a168552600a909352949092209251835590516001830155915191516001600160801b03908116600160801b029216919091176002909101555b6040516001600160801b038316906001600160a01b038516907f197eaede07bece72c8e0d907669d15a7f24328f239a5f1c28ccefc94bfadb35890600090a3505050565b6005546001600160801b0390811690831610156127e45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b6001600160a01b0381161580159061280557506001600160a01b0381163014155b61283c5760405162461bcd60e51b815260206004820152600860248201526723261d229699181960c11b6044820152606401610816565b6040805180820182526001600160801b0384168082526001600160a01b0384811660208085018281528984166000818152600b8452889020965187559051600190960180546001600160a01b031916969094169590951790925584519283529082015290917fec42a6c8c2a3b9298ec01f8c989a25ba1341377172e59d478ac6780a89451634910160405180910390a2505050565b60016001600160a01b03821660009081526007602052604090206001015460ff16600281111561290357612903613229565b146129205760405162461bcd60e51b81526004016108169061359f565b6001600160a01b0381166000908152600a60209081526040918290208251608081018452815481526001808301549382019390935260028201546001600160801b0380821695830195909552600160801b900490931660608401529161298591612f01565b6129bc5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303760c01b6044820152606401610816565b60055460028201546000916001600160801b03600160801b918290048116919092049091161015612a0357600182015482546129f891906135c1565b600083559050612a0a565b5060018101545b60006001838101829055600554600285018054600160801b9092046001600160801b03166001600160801b03199092169190911790556001600160a01b038581168352600b6020908152604093849020845180860190955280548552909201541690820181905284919015612a8157806020015191505b600254612a98906001600160a01b03168385612afb565b600554604080518581526001600160a01b0385811660208301523393600160801b90046001600160801b031692908916917f81c1b0e2611c67c291f656df4c6cd2c85bf255152046acdccd8df8a5ee303456910160405180910390a45050505050565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612b735760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610816565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006546000908190620f424090612bec90600160801b900462ffffff16826137b8565b612bfb9062ffffff16856137d4565b612c0591906137f3565b9150612c118284613671565b9050915091565b600454612c2590836135c1565b83608001511015612c635760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b806001600160a01b031683606001516001600160a01b031603612cb35760405162461bcd60e51b815260206004820152600860248201526711930e914b4c8c0d60c21b6044820152606401610816565b608083015160025460608501516040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015612d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613586565b1015612d635760405162461bcd60e51b815260206004820152600860248201526723261d229699181b60c11b6044820152606401610816565b60608301516080840151600254610a5a926001600160a01b03909116913090612f51565b60608101516080820151600254611037926001600160a01b0390911691612afb565b6000612dbe836001600160a01b038416612fdb565b9392505050565b80471015612e155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610816565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e62576040519150601f19603f3d011682016040523d82523d6000602084013e612e67565b606091505b5050905080610a5a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610816565b60606000612dbe8361302a565b6000612187825490565b6000612dbe8383613086565b6000818360200151101580612dbe5750602083015183518391612f23916135c1565b10158015612dbe575060055460608401516001600160801b03600160801b9092048216911610905092915050565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080612fd45760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610816565b5050505050565b600081815260018301602052604081205461302257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612187565b506000612187565b60608160000180548060200260200160405190810160405280929190818152602001828054801561307a57602002820191906000526020600020905b815481526020019060010190808311613066575b50505050509050919050565b600082600001828154811061309d5761309d61354e565b9060005260206000200154905092915050565b80356001600160801b03811681146130c757600080fd5b919050565b6000602082840312156130de57600080fd5b612dbe826130b0565b6001600160a01b038116811461103757600080fd5b80356130c7816130e7565b60006020828403121561311957600080fd5b8135612dbe816130e7565b60006020828403121561313657600080fd5b813562ffffff81168114612dbe57600080fd5b60006020828403121561315b57600080fd5b81358015158114612dbe57600080fd5b60008060006060848603121561318057600080fd5b833561318b816130e7565b9250613199602085016130b0565b915060408401356131a9816130e7565b809150509250925092565b600080602083850312156131c757600080fd5b823567ffffffffffffffff808211156131df57600080fd5b818501915085601f8301126131f357600080fd5b81358181111561320257600080fd5b8660208260051b850101111561321757600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052602160045260246000fd5b60006060820190506001600160801b038084511683528060208501511660208401525060408301516003811061328557634e487b7160e01b600052602160045260246000fd5b8060408401525092915050565b600080604083850312156132a557600080fd5b82356132b0816130e7565b915060208301356132c0816130e7565b809150509250929050565b6000806000606084860312156132e057600080fd5b6132e9846130b0565b92506020840135613199816130e7565b803561ffff811681146130c757600080fd5b60006020828403121561331d57600080fd5b612dbe826132f9565b60006020828403121561333857600080fd5b5035919050565b600060a0828403121561335157600080fd5b50919050565b6000806040838503121561336a57600080fd5b6132b0836130b0565b821515815260006020604081840152835180604085015260005b818110156133a95785810183015185820160600152820161338d565b818111156133bb576000606083870101525b50601f01601f191692909201606001949350505050565b600081518084526020808501945080840160005b8381101561340b5781516001600160a01b0316875295820195908201906001016133e6565b509495945050505050565b602081526000612dbe60208301846133d2565b6000806040838503121561343c57600080fd5b613445836132f9565b9150613453602084016130b0565b90509250929050565b821515815260406020820152600061347760408301846133d2565b949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260089082015267464c3a452d33303160c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b0380831681851680830382111561350e5761350e6134d6565b01949350505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526008908201526723261d229699981960c11b604082015260600190565b60006020828403121561359857600080fd5b5051919050565b60208082526008908201526711930e914b4c4c0d60c21b604082015260600190565b600082198211156135d4576135d46134d6565b500190565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135613604816130e7565b61360e81836135d9565b50602082013561361d816130e7565b61362a81600184016135d9565b506040820135613639816130e7565b61364681600284016135d9565b506060820135613655816130e7565b61366281600384016135d9565b50608082013560048201555050565b600082821015613683576136836134d6565b500390565b634e487b7160e01b600052604160045260246000fd5b600060a082840312156136b057600080fd5b60405160a0810181811067ffffffffffffffff821117156136e157634e487b7160e01b600052604160045260246000fd5b60405282356136ef816130e7565b815260208301356136ff816130e7565b6020820152613710604084016130fc565b6040820152613721606084016130fc565b6060820152608083013560808201528091505092915050565b60006001600160801b038381169083168181101561375a5761375a6134d6565b039392505050565b600061ffff808316818103613779576137796134d6565b6001019392505050565b600060018201613795576137956134d6565b5060010190565b60006001600160801b03808316818103613779576137796134d6565b600062ffffff8381169083168181101561375a5761375a6134d6565b60008160001904831182151516156137ee576137ee6134d6565b500290565b60008261381057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c634300080f000aa164736f6c634300080f000a6080604052678ac7230489e800006004557001000000000000006c6b935b8bbd400000600555600680546001600160c01b031916730a00c35000000000000000000000002e90edd0001790556000600c553480156200005d57600080fd5b50620000693362000073565b60018055620000c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61382280620000d36000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c8063715018a611610167578063d30c9952116100ce578063e70abe9211610087578063e70abe921461077c578063e9e0953f1461078f578063f09a40161461079d578063f2fde38b146107b0578063fa2e750b146107c3578063fe67a54b146107e457600080fd5b8063d30c995214610708578063db4b9dc01461071b578063db9f60ff1461072e578063dde8119f14610741578063e004f5de14610749578063e3d2400f1461075c57600080fd5b806398427177116101205780639842717714610686578063afb8327114610699578063b72ccf37146106ac578063c15ffd87146106d6578063c6e11004146106e9578063cf5303cf146106f257600080fd5b8063715018a6146105fc57806374ecaa7d146106045780637d495139146106175780637ffaa99c1461062a5780638da5cb5b1461064e5780639035b0831461067357600080fd5b80633963510b1161020b57806359a5ea75116101c457806359a5ea751461058a5780635c1a928a146105a45780635c7e9db8146105b757806360448443146105ca578063652eba9b146105e15780636b64c769146105f457600080fd5b80633963510b146104175780633bd950731461042a5780633d621e4c1461043d5780633e53ec7314610468578063501ee12614610536578063559202d51461054957600080fd5b8063219ee3941161025d578063219ee3941461037b57806326371b841461038e5780632897c4f3146103a15780632932b55e146103b457806330ccebb5146103c75780633535228c146103e757600080fd5b806303fddc0d1461029a57806306c7a236146102af57806308fe95b51461032d5780630aa0ce5c146103555780630b58e6db14610368575b600080fd5b6102ad6102a83660046130cc565b6107ec565b005b6103046102bd366004613107565b604080518082018252600080825260209182018190526001600160a01b039384168152600b8252829020825180840190935280548352600101549092169181019190915290565b60408051825181526020928301516001600160a01b031692810192909252015b60405180910390f35b60065461034290600160981b900461ffff1681565b60405161ffff9091168152602001610324565b6102ad610363366004613124565b610874565b6102ad6103763660046130cc565b61095c565b6102ad610389366004613149565b6109d4565b6102ad61039c36600461316b565b610a1c565b6102ad6103af366004613107565b610a5f565b6102ad6103c23660046131b4565b610b96565b6103da6103d5366004613107565b610d27565b604051610324919061323f565b6103fa6103f5366004613292565b610dc6565b604080519283526001600160801b03909116602083015201610324565b6102ad610425366004613107565b610e81565b6102ad610438366004613107565b611004565b600554610450906001600160801b031681565b6040516001600160801b039091168152602001610324565b6104f6610476366004613107565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600a6020908152604091829020825160808101845281548152600182015492810192909252600201546001600160801b0380821693830193909352600160801b9004909116606082015290565b604080518251815260208084015190820152828201516001600160801b039081169282019290925260609283015190911691810191909152608001610324565b6102ad610544366004613107565b61103a565b61055c6105573660046132cb565b611119565b6040805193151584526001600160a01b0390921660208401526001600160801b031690820152606001610324565b60055461045090600160801b90046001600160801b031681565b6102ad6105b236600461330b565b6111d5565b6102ad6105c5366004613107565b611252565b6105d3600c5481565b604051908152602001610324565b6102ad6105ef366004613107565b6112ca565b6102ad6113e5565b6102ad61148e565b6102ad610612366004613326565b6114c4565b6102ad61062536600461333f565b611523565b60065461063e90600160a81b900460ff1681565b6040519015158152602001610324565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610324565b6102ad610681366004613357565b611cf7565b61055c610694366004613292565b611d4c565b6102ad6106a7366004613326565b611d70565b6006546106c290600160801b900462ffffff1681565b60405162ffffff9091168152602001610324565b6102ad6106e4366004613107565b611e43565b6105d360045481565b6106fa611e73565b604051610324929190613373565b6102ad610716366004613107565b611f81565b600654610450906001600160801b031681565b6102ad61073c366004613149565b6120c5565b61045061213c565b60025461065b906001600160a01b031681565b61076f61076a3660046130cc565b612163565b6040516103249190613416565b60035461065b906001600160a01b031681565b6104506001600160801b0381565b6102ad6107ab366004613292565b61218d565b6102ad6107be366004613107565b612224565b6107d66107d1366004613429565b6122bc565b60405161032492919061345c565b61063e61246f565b6000546001600160a01b0316331461081f5760405162461bcd60e51b81526004016108169061347f565b60405180910390fd5b600680546001600160801b0319166001600160801b0383169081179091556040519081527f256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c906020015b60405180910390a150565b6000546001600160a01b0316331461089e5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156108c85760405162461bcd60e51b8152600401610816906134b4565b620f42408162ffffff161061090a5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313360c01b6044820152606401610816565b6006805462ffffff60801b1916600160801b62ffffff8416908102919091179091556040519081527f255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda90602001610869565b6000546001600160a01b031633146109865760405162461bcd60e51b81526004016108169061347f565b600580546001600160801b0319166001600160801b0383169081179091556040519081527f516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f718027290602001610869565b6000546001600160a01b031633146109fe5760405162461bcd60e51b81526004016108169061347f565b60068054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016108169061347f565b610a4f836125ba565b610a5a83838361279a565b505050565b6000546001600160a01b03163314610a895760405162461bcd60e51b81526004016108169061347f565b6001600160a01b03811660009081526007602052604090206002600182015460ff166002811115610abc57610abc613229565b14610af45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b600654600090600160a81b900460ff16610b2057600554600160801b90046001600160801b0316610b3e565b600554610b3e90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f6b4dbdf55669f6c01188b405d3882517d953fb610502150c0720131e879f876e90600090a3505050565b600260015403610bb85760405162461bcd60e51b815260040161081690613517565b60026001556003546001600160a01b03163314610c025760405162461bcd60e51b815260206004820152600860248201526723261d229698981b60c11b6044820152606401610816565b600654600160b81b900460ff16158015610c265750600654600160b01b900460ff16155b610c5d5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6006546001600160801b03163a1115610ca35760405162461bcd60e51b8152602060048201526008602482015267464c3a452d33303760c01b6044820152606401610816565b8060005b81811015610d1d576000848483818110610cc357610cc361354e565b9050602002016020810190610cd89190613107565b6001600160a01b031614610d1557610d15848483818110610cfb57610cfb61354e565b9050602002016020810190610d109190613107565b6128d1565b600101610ca7565b5050600180555050565b610d4860408051606081018252600080825260208201819052909182015290565b6001600160a01b038216600090815260076020908152604091829020825160608101845281546001600160801b038082168352600160801b90910416928101929092526001810154919290919083019060ff166002811115610dac57610dac613229565b6002811115610dbd57610dbd613229565b90525092915050565b6006546000908190600160a81b900460ff16610df45760405162461bcd60e51b815260040161081690613564565b5050600554600160801b90046001600160801b031660008181526008602090815260408083206001600160a01b0396871684528252808320948616835293815290839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093526003830154909316606084015260049091015460809092018290529091565b6000546001600160a01b03163314610eab5760405162461bcd60e51b81526004016108169061347f565b600260015403610ecd5760405162461bcd60e51b815260040161081690613517565b60026001819055546001600160a01b0390811690821603610f1b5760405162461bcd60e51b815260206004820152600860248201526723261d229698981960c11b6044820152606401610816565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190613586565b90508015610ffb57610fb6610fa56000546001600160a01b031690565b6001600160a01b0384169083612afb565b6000546040518281526001600160a01b039091169030907f6c9d637297625e945b296ff73a71fcfbd0a9e062652b6491a921c4c60194176b9060200160405180910390a35b50506001805550565b6000546001600160a01b0316331461102e5760405162461bcd60e51b81526004016108169061347f565b611037816125ba565b50565b6000546001600160a01b031633146110645760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff161561108e5760405162461bcd60e51b8152600401610816906134b4565b6001600160a01b0381166110cf5760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3030360c41b6044820152606401610816565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc990600090a250565b600554600090819081906001600160801b03600160801b9091048116908716106111705760405162461bcd60e51b8152602060048201526008602482015267464c2d453a32303160c01b6044820152606401610816565b6001600160801b03861660009081526008602090815260408083206001600160a01b03808a1685529083528184208882168552909252909120600201541680156111c2576001935091508590506111cc565b6000935091508590505b93509350939050565b6000546001600160a01b031633146111ff5760405162461bcd60e51b81526004016108169061347f565b6006805461ffff60981b1916600160981b61ffff8481168202929092179283905560405192041681527ff20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e4890602001610869565b6000546001600160a01b0316331461127c5760405162461bcd60e51b81526004016108169061347f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b455090602001610869565b6000546001600160a01b031633146112f45760405162461bcd60e51b81526004016108169061347f565b6001600160a01b038116600090815260076020526040902060018082015460ff16600281111561132657611326613229565b146113435760405162461bcd60e51b81526004016108169061359f565b600654600090600160a81b900460ff1661136f57600554600160801b90046001600160801b031661138d565b60055461138d90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f50b47e81a29bef5bc0c09d99b7ac8fc76d78e6b3c3590301827bd4b67bc8840990600090a3505050565b6000546001600160a01b0316331461140f5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156114395760405162461bcd60e51b8152600401610816906134b4565b60068054600160a81b60ff60a81b19909116179055600554604051600160801b9091046001600160801b0316907f38b040053f48d9e3c983bb3a552b8323820ff833ceb2534f3099c195b105cc6c90600090a2565b6000546001600160a01b031633146114b85760405162461bcd60e51b81526004016108169061347f565b6114c26000612b79565b565b6000546001600160a01b031633146114ee5760405162461bcd60e51b81526004016108169061347f565b60048190556040518181527f7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a690602001610869565b600654600160a81b900460ff1661154c5760405162461bcd60e51b815260040161081690613564565b600654600160b01b900460ff16156115915760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6002600154036115b35760405162461bcd60e51b815260040161081690613517565b60026001556115c86080820160608301613107565b6001600160a01b0316336001600160a01b0316146116135760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303360c01b6044820152606401610816565b60006007816116256020850185613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561168657611686613229565b600281111561169757611697613229565b905250905060006007816116b16040860160208701613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561171257611712613229565b600281111561172357611723613229565b905250905060018260400151600281111561174057611740613229565b1461175d5760405162461bcd60e51b81526004016108169061359f565b60028160400151600281111561177557611775613229565b146117ad5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b60055460208301516001600160801b03600160801b90920482169116116118015760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303960c01b6044820152606401610816565b60055460208201516001600160801b03600160801b90920482169116116118555760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3231360c41b6044820152606401610816565b60055482516001600160801b03600160801b9092048216911611156118a75760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313160c01b6044820152606401610816565b60055481516001600160801b03600160801b9092048216911611156118f95760405162461bcd60e51b815260206004820152600860248201526723261d229699189960c11b6044820152606401610816565b600554600160801b90046001600160801b03166000908152600860209081526040822090829061192b90870187613107565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906119609190613107565b6001600160a01b03908116825260208083019390935260409182016000908120835160a0810185528154841681526001820154841681870152600282015484169481019490945260038101549092166060840152600490910154608083015290925090600a9082906119d490880188613107565b6001600160a01b0316815260208101919091526040016000206005546002820154919250600160801b918290046001600160801b03908116929091041614801590611a1f5750805415155b15611a44578054600182018054600090611a3a9084906135c1565b9091555050600081555b600554600160801b90046001600160801b03166000908152600860209081526040822087929091611a7790840184613107565b6001600160a01b03166001600160a01b031681526020019081526020016000206000876020016020810190611aac9190613107565b6001600160a01b031681526020810191909152604001600020611acf82826135f9565b5050608082015115611b6d57600080611aeb8460800151612bc9565b91509150600080611aff8960800135612bc9565b915091508281600c54611b1291906135c1565b611b1c9190613671565b600c5584548490611b2e9084906135c1565b611b389190613671565b8555611b5b611b4c368b90038b018b61369e565b87608001518860600151612c18565b611b6486612d87565b50505050611c1d565b6005546002820154600160801b918290046001600160801b03908116929091041614611bbb576005546002820180546001600160801b03600160801b93849004811690930292169190911790555b600080611bcb8760800135612bc9565b9150915080600c6000828254611be191906135c1565b9091555050825482908490600090611bfa9084906135c1565b90915550611c1a9050611c123689900389018961369e565b600080612c18565b50505b611c54611c2d6020870187613107565b600554600160801b90046001600160801b0316600090815260096020526040902090612da9565b50600554600160801b90046001600160801b0316611c786040870160208801613107565b6001600160a01b0316611c8e6020880188613107565b6001600160a01b03167fed843d47bb78802ebc13e8996623a126d58b999326562053c253db476fb522fa611cc860608a0160408b01613107565b604080516001600160a01b03909216825260808b013560208301520160405180910390a4505060018055505050565b60013360009081526007602052604090206001015460ff166002811115611d2057611d20613229565b14611d3d5760405162461bcd60e51b81526004016108169061359f565b611d4833838361279a565b5050565b6000806000611d63611d5c61213c565b8686611119565b9250925092509250925092565b6000546001600160a01b03163314611d9a5760405162461bcd60e51b81526004016108169061347f565b600260015403611dbc5760405162461bcd60e51b815260040161081690613517565b6002600155478111611e3c57611ded81611dde6000546001600160a01b031690565b6001600160a01b031690612dc5565b6000546001600160a01b03166001600160a01b03167f90881b74cde864d3a0b48a1be016fa7c3217b5dc2b02f4f65544ff1dfa92196982604051611e3391815260200190565b60405180910390a25b5060018055565b600260015403611e655760405162461bcd60e51b815260040161081690613517565b6002600155611e3c816128d1565b600654600090606090600160b81b900460ff1680611e9a5750600654600160b01b900460ff165b80611eaf57506006546001600160801b03163a115b15611ec95750506040805160208101909152600080825291565b6006546005546000935083918291611f0391600160981b900461ffff16906107d190600190600160801b90046001600160801b031661373a565b915091508115611f6557604051600194506314995aaf60e11b90611f2b908390602401613416565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152939492505050565b6000604051806020016040528060008152509350935050509091565b6000546001600160a01b03163314611fab5760405162461bcd60e51b81526004016108169061347f565b600654600090600160a81b900460ff16611fd757600554600160801b90046001600160801b0316611ff5565b600554611ff590600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600290526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561207b5761207b613229565b0217905550506040516001600160801b03831691506001600160a01b038416907f8bbd4ebefde66f702715e863992cd517982ed361339dc6b787ed8b397213fc4b90600090a35050565b6000546001600160a01b031633146120ef5760405162461bcd60e51b81526004016108169061347f565b60068054821515600160b01b0260ff60b01b199091161790556040517fa9bfed3d98385b3777389e321dbde773cf7d335fa604fefbae3dca93564f55869061086990831515815260200190565b60055460009061215e90600190600160801b90046001600160801b031661373a565b905090565b6001600160801b038116600090815260096020526040902060609061218790612ede565b92915050565b6000546001600160a01b031633146121b75760405162461bcd60e51b81526004016108169061347f565b6121c08261103a565b6121c981611252565b600580546001600160801b0316600160801b1790556121ef678ac7230489e800006114c4565b612201686c6b935b8bbd40000061095c565b61220f642e90edd0006107ec565b61221a61c350610874565b611d48600a6111d5565b6000546001600160a01b0316331461224e5760405162461bcd60e51b81526004016108169061347f565b6001600160a01b0381166122b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610816565b61103781612b79565b600060608361ffff1667ffffffffffffffff8111156122dd576122dd613688565b604051908082528060200260200182016040528015612306578160200160208202803683370190505b506001600160801b03841660009081526009602052604081209192508061232c83612eeb565b905060005b8181101561245c5760006123458583612ef5565b6001600160a01b0381166000818152600a602090815260408083208151608081018352815481526001820154818501526002909101546001600160801b0380821683850152600160801b90910481166060830152948452600b909252822054600554949550909391929190911610156123d6576001600160a01b0383166000908152600b60205260409020546123e3565b6005546001600160801b03165b90506123ef8282612f01565b1561242f5782888761ffff168151811061240b5761240b61354e565b6001600160a01b039092166020928302919091019091015261242c86613762565b95505b8a61ffff168661ffff16106124465750505061245c565b505050808061245490613783565b915050612331565b505061ffff161515959194509092505050565b600080546001600160a01b0316331461249a5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff166124c35760405162461bcd60e51b815260040161081690613564565b6002600154036124e55760405162461bcd60e51b815260040161081690613517565b60026001556006805460ff60a81b19169055600554604051600160801b9091046001600160801b0316907f95bed6fbde15e474e4ad8a6d2aaa4a759e6e383d33f8de7c945369167ebf849090600090a26005805460109061255590600160801b90046001600160801b031661379c565b91906101000a8154816001600160801b0302191690836001600160801b031602179055506000600c5490506000600c819055506125b061259d6000546001600160a01b031690565b6002546001600160a01b03169083612afb565b5050600180805590565b600654600090600160a81b900460ff166125e657600554600160801b90046001600160801b0316612604565b60055461260490600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600190526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561268a5761268a613229565b021790555050506001600160a01b0382166000908152600a60209081526040808320815160808101835281548152600182015493810193909352600201546001600160801b0380821692840192909252600160801b90041660608201819052909103612756576040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b038a168552600a909352949092209251835590516001830155915191516001600160801b03908116600160801b029216919091176002909101555b6040516001600160801b038316906001600160a01b038516907f197eaede07bece72c8e0d907669d15a7f24328f239a5f1c28ccefc94bfadb35890600090a3505050565b6005546001600160801b0390811690831610156127e45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b6001600160a01b0381161580159061280557506001600160a01b0381163014155b61283c5760405162461bcd60e51b815260206004820152600860248201526723261d229699181960c11b6044820152606401610816565b6040805180820182526001600160801b0384168082526001600160a01b0384811660208085018281528984166000818152600b8452889020965187559051600190960180546001600160a01b031916969094169590951790925584519283529082015290917fec42a6c8c2a3b9298ec01f8c989a25ba1341377172e59d478ac6780a89451634910160405180910390a2505050565b60016001600160a01b03821660009081526007602052604090206001015460ff16600281111561290357612903613229565b146129205760405162461bcd60e51b81526004016108169061359f565b6001600160a01b0381166000908152600a60209081526040918290208251608081018452815481526001808301549382019390935260028201546001600160801b0380821695830195909552600160801b900490931660608401529161298591612f01565b6129bc5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303760c01b6044820152606401610816565b60055460028201546000916001600160801b03600160801b918290048116919092049091161015612a0357600182015482546129f891906135c1565b600083559050612a0a565b5060018101545b60006001838101829055600554600285018054600160801b9092046001600160801b03166001600160801b03199092169190911790556001600160a01b038581168352600b6020908152604093849020845180860190955280548552909201541690820181905284919015612a8157806020015191505b600254612a98906001600160a01b03168385612afb565b600554604080518581526001600160a01b0385811660208301523393600160801b90046001600160801b031692908916917f81c1b0e2611c67c291f656df4c6cd2c85bf255152046acdccd8df8a5ee303456910160405180910390a45050505050565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612b735760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610816565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006546000908190620f424090612bec90600160801b900462ffffff16826137b8565b612bfb9062ffffff16856137d4565b612c0591906137f3565b9150612c118284613671565b9050915091565b600454612c2590836135c1565b83608001511015612c635760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b806001600160a01b031683606001516001600160a01b031603612cb35760405162461bcd60e51b815260206004820152600860248201526711930e914b4c8c0d60c21b6044820152606401610816565b608083015160025460608501516040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015612d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613586565b1015612d635760405162461bcd60e51b815260206004820152600860248201526723261d229699181b60c11b6044820152606401610816565b60608301516080840151600254610a5a926001600160a01b03909116913090612f51565b60608101516080820151600254611037926001600160a01b0390911691612afb565b6000612dbe836001600160a01b038416612fdb565b9392505050565b80471015612e155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610816565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e62576040519150601f19603f3d011682016040523d82523d6000602084013e612e67565b606091505b5050905080610a5a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610816565b60606000612dbe8361302a565b6000612187825490565b6000612dbe8383613086565b6000818360200151101580612dbe5750602083015183518391612f23916135c1565b10158015612dbe575060055460608401516001600160801b03600160801b9092048216911610905092915050565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080612fd45760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610816565b5050505050565b600081815260018301602052604081205461302257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612187565b506000612187565b60608160000180548060200260200160405190810160405280929190818152602001828054801561307a57602002820191906000526020600020905b815481526020019060010190808311613066575b50505050509050919050565b600082600001828154811061309d5761309d61354e565b9060005260206000200154905092915050565b80356001600160801b03811681146130c757600080fd5b919050565b6000602082840312156130de57600080fd5b612dbe826130b0565b6001600160a01b038116811461103757600080fd5b80356130c7816130e7565b60006020828403121561311957600080fd5b8135612dbe816130e7565b60006020828403121561313657600080fd5b813562ffffff81168114612dbe57600080fd5b60006020828403121561315b57600080fd5b81358015158114612dbe57600080fd5b60008060006060848603121561318057600080fd5b833561318b816130e7565b9250613199602085016130b0565b915060408401356131a9816130e7565b809150509250925092565b600080602083850312156131c757600080fd5b823567ffffffffffffffff808211156131df57600080fd5b818501915085601f8301126131f357600080fd5b81358181111561320257600080fd5b8660208260051b850101111561321757600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052602160045260246000fd5b60006060820190506001600160801b038084511683528060208501511660208401525060408301516003811061328557634e487b7160e01b600052602160045260246000fd5b8060408401525092915050565b600080604083850312156132a557600080fd5b82356132b0816130e7565b915060208301356132c0816130e7565b809150509250929050565b6000806000606084860312156132e057600080fd5b6132e9846130b0565b92506020840135613199816130e7565b803561ffff811681146130c757600080fd5b60006020828403121561331d57600080fd5b612dbe826132f9565b60006020828403121561333857600080fd5b5035919050565b600060a0828403121561335157600080fd5b50919050565b6000806040838503121561336a57600080fd5b6132b0836130b0565b821515815260006020604081840152835180604085015260005b818110156133a95785810183015185820160600152820161338d565b818111156133bb576000606083870101525b50601f01601f191692909201606001949350505050565b600081518084526020808501945080840160005b8381101561340b5781516001600160a01b0316875295820195908201906001016133e6565b509495945050505050565b602081526000612dbe60208301846133d2565b6000806040838503121561343c57600080fd5b613445836132f9565b9150613453602084016130b0565b90509250929050565b821515815260406020820152600061347760408301846133d2565b949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260089082015267464c3a452d33303160c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b0380831681851680830382111561350e5761350e6134d6565b01949350505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526008908201526723261d229699981960c11b604082015260600190565b60006020828403121561359857600080fd5b5051919050565b60208082526008908201526711930e914b4c4c0d60c21b604082015260600190565b600082198211156135d4576135d46134d6565b500190565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135613604816130e7565b61360e81836135d9565b50602082013561361d816130e7565b61362a81600184016135d9565b506040820135613639816130e7565b61364681600284016135d9565b506060820135613655816130e7565b61366281600384016135d9565b50608082013560048201555050565b600082821015613683576136836134d6565b500390565b634e487b7160e01b600052604160045260246000fd5b600060a082840312156136b057600080fd5b60405160a0810181811067ffffffffffffffff821117156136e157634e487b7160e01b600052604160045260246000fd5b60405282356136ef816130e7565b815260208301356136ff816130e7565b6020820152613710604084016130fc565b6040820152613721606084016130fc565b6060820152608083013560808201528091505092915050565b60006001600160801b038381169083168181101561375a5761375a6134d6565b039392505050565b600061ffff808316818103613779576137796134d6565b6001019392505050565b600060018201613795576137956134d6565b5060010190565b60006001600160801b03808316818103613779576137796134d6565b600062ffffff8381169083168181101561375a5761375a6134d6565b60008160001904831182151516156137ee576137ee6134d6565b500290565b60008261381057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c634300080f000a68656c6c6f000000000000000000000000000000000000000000000000000000", - "nonce": "0x0", - "accessList": [] - } - } - ], - "receipts": [ - { - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "from": "0x1ba0f96bf6b26df11a58553c6db9a0314938cf70", - "to": null, - "cumulativeGasUsed": "0x702167", - "gasUsed": "0x6972fd", - "contractAddress": "0xc71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "logs": [ - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000c71cf7eb2839d864f356da13ebe22883fcbc9b0f" - ], - "data": "0x", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xa", - "removed": false - }, - { - "address": "0xc71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "topics": [ - "0xa89c1a761177532f843f74a1ba026520efa520185852784cc804d057c8b96a5f" - ], - "data": "0x000000000000000000000000bed690780a7d5fd13fe29d3fdcb800733fd62245", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xb", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc9", - "0x0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270" - ], - "data": "0x", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xc", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0xf9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b4550" - ], - "data": "0x000000000000000000000000527a819db1eb0e34426297b03bae11f2f8b3a19e", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xd", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a6" - ], - "data": "0x0000000000000000000000000000000000000000000000008ac7230489e80000", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xe", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f7180272" - ], - "data": "0x00000000000000000000000000000000000000000000006c6b935b8bbd400000", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xf", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c" - ], - "data": "0x0000000000000000000000000000000000000000000000000000002e90edd000", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x10", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000c350", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x11", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0xf20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e48" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000000a", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x12", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x000000000000000000000000c71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "0x0000000000000000000000001ba0f96bf6b26df11a58553c6db9a0314938cf70" - ], - "data": "0x", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x13", - "removed": false - }, - { - "address": "0x0000000000000000000000000000000000001010", - "topics": [ - "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", - "0x0000000000000000000000000000000000000000000000000000000000001010", - "0x0000000000000000000000001ba0f96bf6b26df11a58553c6db9a0314938cf70", - "0x0000000000000000000000001efecb61a2f80aa34d3b9218b564a64d05946290" - ], - "data": "0x00000000000000000000000000000000000000000000000004cb97062e4755500000000000000000000000000000000000000000000000005367cf285c1900000000000000000000000000000000000000000000000017f7d15dd440c4be848b0000000000000000000000000000000000000000000000004e9c38222dd1aab00000000000000000000000000000000000000000000017f7d6296b46f305d9db", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x14", - "removed": false - } - ], - "status": "0x1", - "logsBloom": "0x00000040040000000000000000000000180010000000000000801000000000020040000000084000000080000000000080008000080000100000000008000000200400000000000000000000008000800001040000000000000100000000020000000000120000200000000000000800002000000004000080000000000000400000000000000000000000000000000020000000000000000000108000000000200000000000000000000000010000000040000208000000000000000000004800000100000104000001000000000000400200000000000000100000000020002000004000000000000000000000000004000001000000000000000000100000", - "type": "0x2", - "effectiveGasPrice": "0xba43b7400" - } - ], - "libraries": [], - "pending": [], - "path": "broadcast/PreProxyDeploy.s.sol/137/run-latest.json", - "returns": {}, - "timestamp": 1659052009 -} \ No newline at end of file diff --git a/broadcast/PreProxyDeploy.s.sol/137/run-latest.json b/broadcast/PreProxyDeploy.s.sol/137/run-latest.json deleted file mode 100644 index 69c312a..0000000 --- a/broadcast/PreProxyDeploy.s.sol/137/run-latest.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "type": "CREATE", - "contractAddress": "0xc71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "tx": { - "type": "0x02", - "from": "0x1ba0f96bf6b26df11a58553c6db9a0314938cf70", - "gas": "0x89157c", - "value": "0x0", - "data": "0x608060405234801561001057600080fd5b5060405161797438038061797483398101604081905261002f91610440565b7fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80546001600160a01b031990811673b3f5503f93d5ef84b06993a1975b9d21b962892f9081179092557f2bda5adf664a0c31bf9134cad8d937629fcee52b9cefd545e0c716efa1202a518054821673527a819db1eb0e34426297b03bae11f2f8b3a19e1790557fa8c57e13d49dd6e2870c5d5f809130d4d18970dd320604381d96a20d80a714f480548216831790557fa3e343505a37a5f41b372e3722e1aa14239f74a613d1511ba6a638cac5ed8589805482169092179091557fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e08054821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790557f0cb0be258cd4e0f89ef5514ec447dd8846b0cf865c7d0d8ea82ff58a1eae81a180548216730d500b1d8e8ef31e21c99d1db9a6444d3adf12701790557f2af04f721798314fc694a46b3db9f8005ee5d928ceb0c93e438e01e3ac240ed480548216739c3c9283d3e44854697cd22d3faa240cfb0328899081179091557f7a1c85dbd356d1ede4c0e23eb93fed1980e3ae3583babceeae9b100fd153ad6e8054909216179055466000908152600160209081526040808320546002909252909120546001600160a01b039081169116806102515760405162461bcd60e51b81526020600482015260066024820152654f286f29707360d01b60448201526064015b60405180910390fd5b6001600160a01b0382166102915760405162461bcd60e51b815260206004820152600760248201526615dc985c1c195960ca1b6044820152606401610248565b61029c8383836102a4565b505050610459565b826040516102b190610433565b8190604051809103906000f59050801580156102d1573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216918217905561032a5760405162461bcd60e51b815260206004820152600a60248201526915dc9bdb99c81a5b9a5d60b21b6044820152606401610248565b6000546040516001600160a01b0390911681527fa89c1a761177532f843f74a1ba026520efa520185852784cc804d057c8b96a5f9060200160405180910390a160005460405163784d200b60e11b81526001600160a01b03848116600483015283811660248301529091169063f09a401690604401600060405180830381600087803b1580156103b957600080fd5b505af11580156103cd573d6000803e3d6000fd5b505060005460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b50505050505050565b6138f58061407f83390190565b60006020828403121561045257600080fd5b5051919050565b613c17806104686000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630e2920441461005c5780637d0464521461008c5780637f79c601146100b55780638c880723146100de57806396ca14b114610110575b600080fd5b60005461006f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61006f61009a3660046102c1565b6002602052600090815260409020546001600160a01b031681565b61006f6100c33660046102c1565b6001602052600090815260409020546001600160a01b031681565b6100f16100ec3660046102c1565b61014a565b604080516001600160a01b039093168352901515602083015201610083565b4660009081526001602090815260408083205460028352928190205481516001600160a01b03918216815293169183019190915201610083565b46600090815260016020908152604080832054600290925282205482916001600160a01b039182169116806101af5760405162461bcd60e51b81526020600482015260066024820152654f286f29707360d01b60448201526064015b60405180910390fd5b6001600160a01b0382166101ef5760405162461bcd60e51b815260206004820152600760248201526615dc985c1c195960ca1b60448201526064016101a6565b60ff60f81b308660405180602001610206906102b4565b601f1982820381018352601f90910116604081905261022891906020016102da565b6040516020818303038152906040528051906020012060405160200161028594939291906001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051601f198184030181529190528051602090910120956001600160a01b0387163b151595509350505050565b6138f58061031683390190565b6000602082840312156102d357600080fd5b5035919050565b6000825160005b818110156102fb57602081860181015185830152016102e1565b8181111561030a576000828501525b50919091019291505056fe6080604052678ac7230489e800006004557001000000000000006c6b935b8bbd400000600555600680546001600160c01b031916730a00c35000000000000000000000002e90edd0001790556000600c553480156200005d57600080fd5b50620000693362000073565b60018055620000c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61382280620000d36000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c8063715018a611610167578063d30c9952116100ce578063e70abe9211610087578063e70abe921461077c578063e9e0953f1461078f578063f09a40161461079d578063f2fde38b146107b0578063fa2e750b146107c3578063fe67a54b146107e457600080fd5b8063d30c995214610708578063db4b9dc01461071b578063db9f60ff1461072e578063dde8119f14610741578063e004f5de14610749578063e3d2400f1461075c57600080fd5b806398427177116101205780639842717714610686578063afb8327114610699578063b72ccf37146106ac578063c15ffd87146106d6578063c6e11004146106e9578063cf5303cf146106f257600080fd5b8063715018a6146105fc57806374ecaa7d146106045780637d495139146106175780637ffaa99c1461062a5780638da5cb5b1461064e5780639035b0831461067357600080fd5b80633963510b1161020b57806359a5ea75116101c457806359a5ea751461058a5780635c1a928a146105a45780635c7e9db8146105b757806360448443146105ca578063652eba9b146105e15780636b64c769146105f457600080fd5b80633963510b146104175780633bd950731461042a5780633d621e4c1461043d5780633e53ec7314610468578063501ee12614610536578063559202d51461054957600080fd5b8063219ee3941161025d578063219ee3941461037b57806326371b841461038e5780632897c4f3146103a15780632932b55e146103b457806330ccebb5146103c75780633535228c146103e757600080fd5b806303fddc0d1461029a57806306c7a236146102af57806308fe95b51461032d5780630aa0ce5c146103555780630b58e6db14610368575b600080fd5b6102ad6102a83660046130cc565b6107ec565b005b6103046102bd366004613107565b604080518082018252600080825260209182018190526001600160a01b039384168152600b8252829020825180840190935280548352600101549092169181019190915290565b60408051825181526020928301516001600160a01b031692810192909252015b60405180910390f35b60065461034290600160981b900461ffff1681565b60405161ffff9091168152602001610324565b6102ad610363366004613124565b610874565b6102ad6103763660046130cc565b61095c565b6102ad610389366004613149565b6109d4565b6102ad61039c36600461316b565b610a1c565b6102ad6103af366004613107565b610a5f565b6102ad6103c23660046131b4565b610b96565b6103da6103d5366004613107565b610d27565b604051610324919061323f565b6103fa6103f5366004613292565b610dc6565b604080519283526001600160801b03909116602083015201610324565b6102ad610425366004613107565b610e81565b6102ad610438366004613107565b611004565b600554610450906001600160801b031681565b6040516001600160801b039091168152602001610324565b6104f6610476366004613107565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600a6020908152604091829020825160808101845281548152600182015492810192909252600201546001600160801b0380821693830193909352600160801b9004909116606082015290565b604080518251815260208084015190820152828201516001600160801b039081169282019290925260609283015190911691810191909152608001610324565b6102ad610544366004613107565b61103a565b61055c6105573660046132cb565b611119565b6040805193151584526001600160a01b0390921660208401526001600160801b031690820152606001610324565b60055461045090600160801b90046001600160801b031681565b6102ad6105b236600461330b565b6111d5565b6102ad6105c5366004613107565b611252565b6105d3600c5481565b604051908152602001610324565b6102ad6105ef366004613107565b6112ca565b6102ad6113e5565b6102ad61148e565b6102ad610612366004613326565b6114c4565b6102ad61062536600461333f565b611523565b60065461063e90600160a81b900460ff1681565b6040519015158152602001610324565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610324565b6102ad610681366004613357565b611cf7565b61055c610694366004613292565b611d4c565b6102ad6106a7366004613326565b611d70565b6006546106c290600160801b900462ffffff1681565b60405162ffffff9091168152602001610324565b6102ad6106e4366004613107565b611e43565b6105d360045481565b6106fa611e73565b604051610324929190613373565b6102ad610716366004613107565b611f81565b600654610450906001600160801b031681565b6102ad61073c366004613149565b6120c5565b61045061213c565b60025461065b906001600160a01b031681565b61076f61076a3660046130cc565b612163565b6040516103249190613416565b60035461065b906001600160a01b031681565b6104506001600160801b0381565b6102ad6107ab366004613292565b61218d565b6102ad6107be366004613107565b612224565b6107d66107d1366004613429565b6122bc565b60405161032492919061345c565b61063e61246f565b6000546001600160a01b0316331461081f5760405162461bcd60e51b81526004016108169061347f565b60405180910390fd5b600680546001600160801b0319166001600160801b0383169081179091556040519081527f256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c906020015b60405180910390a150565b6000546001600160a01b0316331461089e5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156108c85760405162461bcd60e51b8152600401610816906134b4565b620f42408162ffffff161061090a5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313360c01b6044820152606401610816565b6006805462ffffff60801b1916600160801b62ffffff8416908102919091179091556040519081527f255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda90602001610869565b6000546001600160a01b031633146109865760405162461bcd60e51b81526004016108169061347f565b600580546001600160801b0319166001600160801b0383169081179091556040519081527f516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f718027290602001610869565b6000546001600160a01b031633146109fe5760405162461bcd60e51b81526004016108169061347f565b60068054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016108169061347f565b610a4f836125ba565b610a5a83838361279a565b505050565b6000546001600160a01b03163314610a895760405162461bcd60e51b81526004016108169061347f565b6001600160a01b03811660009081526007602052604090206002600182015460ff166002811115610abc57610abc613229565b14610af45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b600654600090600160a81b900460ff16610b2057600554600160801b90046001600160801b0316610b3e565b600554610b3e90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f6b4dbdf55669f6c01188b405d3882517d953fb610502150c0720131e879f876e90600090a3505050565b600260015403610bb85760405162461bcd60e51b815260040161081690613517565b60026001556003546001600160a01b03163314610c025760405162461bcd60e51b815260206004820152600860248201526723261d229698981b60c11b6044820152606401610816565b600654600160b81b900460ff16158015610c265750600654600160b01b900460ff16155b610c5d5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6006546001600160801b03163a1115610ca35760405162461bcd60e51b8152602060048201526008602482015267464c3a452d33303760c01b6044820152606401610816565b8060005b81811015610d1d576000848483818110610cc357610cc361354e565b9050602002016020810190610cd89190613107565b6001600160a01b031614610d1557610d15848483818110610cfb57610cfb61354e565b9050602002016020810190610d109190613107565b6128d1565b600101610ca7565b5050600180555050565b610d4860408051606081018252600080825260208201819052909182015290565b6001600160a01b038216600090815260076020908152604091829020825160608101845281546001600160801b038082168352600160801b90910416928101929092526001810154919290919083019060ff166002811115610dac57610dac613229565b6002811115610dbd57610dbd613229565b90525092915050565b6006546000908190600160a81b900460ff16610df45760405162461bcd60e51b815260040161081690613564565b5050600554600160801b90046001600160801b031660008181526008602090815260408083206001600160a01b0396871684528252808320948616835293815290839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093526003830154909316606084015260049091015460809092018290529091565b6000546001600160a01b03163314610eab5760405162461bcd60e51b81526004016108169061347f565b600260015403610ecd5760405162461bcd60e51b815260040161081690613517565b60026001819055546001600160a01b0390811690821603610f1b5760405162461bcd60e51b815260206004820152600860248201526723261d229698981960c11b6044820152606401610816565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190613586565b90508015610ffb57610fb6610fa56000546001600160a01b031690565b6001600160a01b0384169083612afb565b6000546040518281526001600160a01b039091169030907f6c9d637297625e945b296ff73a71fcfbd0a9e062652b6491a921c4c60194176b9060200160405180910390a35b50506001805550565b6000546001600160a01b0316331461102e5760405162461bcd60e51b81526004016108169061347f565b611037816125ba565b50565b6000546001600160a01b031633146110645760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff161561108e5760405162461bcd60e51b8152600401610816906134b4565b6001600160a01b0381166110cf5760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3030360c41b6044820152606401610816565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc990600090a250565b600554600090819081906001600160801b03600160801b9091048116908716106111705760405162461bcd60e51b8152602060048201526008602482015267464c2d453a32303160c01b6044820152606401610816565b6001600160801b03861660009081526008602090815260408083206001600160a01b03808a1685529083528184208882168552909252909120600201541680156111c2576001935091508590506111cc565b6000935091508590505b93509350939050565b6000546001600160a01b031633146111ff5760405162461bcd60e51b81526004016108169061347f565b6006805461ffff60981b1916600160981b61ffff8481168202929092179283905560405192041681527ff20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e4890602001610869565b6000546001600160a01b0316331461127c5760405162461bcd60e51b81526004016108169061347f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b455090602001610869565b6000546001600160a01b031633146112f45760405162461bcd60e51b81526004016108169061347f565b6001600160a01b038116600090815260076020526040902060018082015460ff16600281111561132657611326613229565b146113435760405162461bcd60e51b81526004016108169061359f565b600654600090600160a81b900460ff1661136f57600554600160801b90046001600160801b031661138d565b60055461138d90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f50b47e81a29bef5bc0c09d99b7ac8fc76d78e6b3c3590301827bd4b67bc8840990600090a3505050565b6000546001600160a01b0316331461140f5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156114395760405162461bcd60e51b8152600401610816906134b4565b60068054600160a81b60ff60a81b19909116179055600554604051600160801b9091046001600160801b0316907f38b040053f48d9e3c983bb3a552b8323820ff833ceb2534f3099c195b105cc6c90600090a2565b6000546001600160a01b031633146114b85760405162461bcd60e51b81526004016108169061347f565b6114c26000612b79565b565b6000546001600160a01b031633146114ee5760405162461bcd60e51b81526004016108169061347f565b60048190556040518181527f7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a690602001610869565b600654600160a81b900460ff1661154c5760405162461bcd60e51b815260040161081690613564565b600654600160b01b900460ff16156115915760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6002600154036115b35760405162461bcd60e51b815260040161081690613517565b60026001556115c86080820160608301613107565b6001600160a01b0316336001600160a01b0316146116135760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303360c01b6044820152606401610816565b60006007816116256020850185613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561168657611686613229565b600281111561169757611697613229565b905250905060006007816116b16040860160208701613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561171257611712613229565b600281111561172357611723613229565b905250905060018260400151600281111561174057611740613229565b1461175d5760405162461bcd60e51b81526004016108169061359f565b60028160400151600281111561177557611775613229565b146117ad5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b60055460208301516001600160801b03600160801b90920482169116116118015760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303960c01b6044820152606401610816565b60055460208201516001600160801b03600160801b90920482169116116118555760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3231360c41b6044820152606401610816565b60055482516001600160801b03600160801b9092048216911611156118a75760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313160c01b6044820152606401610816565b60055481516001600160801b03600160801b9092048216911611156118f95760405162461bcd60e51b815260206004820152600860248201526723261d229699189960c11b6044820152606401610816565b600554600160801b90046001600160801b03166000908152600860209081526040822090829061192b90870187613107565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906119609190613107565b6001600160a01b03908116825260208083019390935260409182016000908120835160a0810185528154841681526001820154841681870152600282015484169481019490945260038101549092166060840152600490910154608083015290925090600a9082906119d490880188613107565b6001600160a01b0316815260208101919091526040016000206005546002820154919250600160801b918290046001600160801b03908116929091041614801590611a1f5750805415155b15611a44578054600182018054600090611a3a9084906135c1565b9091555050600081555b600554600160801b90046001600160801b03166000908152600860209081526040822087929091611a7790840184613107565b6001600160a01b03166001600160a01b031681526020019081526020016000206000876020016020810190611aac9190613107565b6001600160a01b031681526020810191909152604001600020611acf82826135f9565b5050608082015115611b6d57600080611aeb8460800151612bc9565b91509150600080611aff8960800135612bc9565b915091508281600c54611b1291906135c1565b611b1c9190613671565b600c5584548490611b2e9084906135c1565b611b389190613671565b8555611b5b611b4c368b90038b018b61369e565b87608001518860600151612c18565b611b6486612d87565b50505050611c1d565b6005546002820154600160801b918290046001600160801b03908116929091041614611bbb576005546002820180546001600160801b03600160801b93849004811690930292169190911790555b600080611bcb8760800135612bc9565b9150915080600c6000828254611be191906135c1565b9091555050825482908490600090611bfa9084906135c1565b90915550611c1a9050611c123689900389018961369e565b600080612c18565b50505b611c54611c2d6020870187613107565b600554600160801b90046001600160801b0316600090815260096020526040902090612da9565b50600554600160801b90046001600160801b0316611c786040870160208801613107565b6001600160a01b0316611c8e6020880188613107565b6001600160a01b03167fed843d47bb78802ebc13e8996623a126d58b999326562053c253db476fb522fa611cc860608a0160408b01613107565b604080516001600160a01b03909216825260808b013560208301520160405180910390a4505060018055505050565b60013360009081526007602052604090206001015460ff166002811115611d2057611d20613229565b14611d3d5760405162461bcd60e51b81526004016108169061359f565b611d4833838361279a565b5050565b6000806000611d63611d5c61213c565b8686611119565b9250925092509250925092565b6000546001600160a01b03163314611d9a5760405162461bcd60e51b81526004016108169061347f565b600260015403611dbc5760405162461bcd60e51b815260040161081690613517565b6002600155478111611e3c57611ded81611dde6000546001600160a01b031690565b6001600160a01b031690612dc5565b6000546001600160a01b03166001600160a01b03167f90881b74cde864d3a0b48a1be016fa7c3217b5dc2b02f4f65544ff1dfa92196982604051611e3391815260200190565b60405180910390a25b5060018055565b600260015403611e655760405162461bcd60e51b815260040161081690613517565b6002600155611e3c816128d1565b600654600090606090600160b81b900460ff1680611e9a5750600654600160b01b900460ff165b80611eaf57506006546001600160801b03163a115b15611ec95750506040805160208101909152600080825291565b6006546005546000935083918291611f0391600160981b900461ffff16906107d190600190600160801b90046001600160801b031661373a565b915091508115611f6557604051600194506314995aaf60e11b90611f2b908390602401613416565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152939492505050565b6000604051806020016040528060008152509350935050509091565b6000546001600160a01b03163314611fab5760405162461bcd60e51b81526004016108169061347f565b600654600090600160a81b900460ff16611fd757600554600160801b90046001600160801b0316611ff5565b600554611ff590600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600290526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561207b5761207b613229565b0217905550506040516001600160801b03831691506001600160a01b038416907f8bbd4ebefde66f702715e863992cd517982ed361339dc6b787ed8b397213fc4b90600090a35050565b6000546001600160a01b031633146120ef5760405162461bcd60e51b81526004016108169061347f565b60068054821515600160b01b0260ff60b01b199091161790556040517fa9bfed3d98385b3777389e321dbde773cf7d335fa604fefbae3dca93564f55869061086990831515815260200190565b60055460009061215e90600190600160801b90046001600160801b031661373a565b905090565b6001600160801b038116600090815260096020526040902060609061218790612ede565b92915050565b6000546001600160a01b031633146121b75760405162461bcd60e51b81526004016108169061347f565b6121c08261103a565b6121c981611252565b600580546001600160801b0316600160801b1790556121ef678ac7230489e800006114c4565b612201686c6b935b8bbd40000061095c565b61220f642e90edd0006107ec565b61221a61c350610874565b611d48600a6111d5565b6000546001600160a01b0316331461224e5760405162461bcd60e51b81526004016108169061347f565b6001600160a01b0381166122b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610816565b61103781612b79565b600060608361ffff1667ffffffffffffffff8111156122dd576122dd613688565b604051908082528060200260200182016040528015612306578160200160208202803683370190505b506001600160801b03841660009081526009602052604081209192508061232c83612eeb565b905060005b8181101561245c5760006123458583612ef5565b6001600160a01b0381166000818152600a602090815260408083208151608081018352815481526001820154818501526002909101546001600160801b0380821683850152600160801b90910481166060830152948452600b909252822054600554949550909391929190911610156123d6576001600160a01b0383166000908152600b60205260409020546123e3565b6005546001600160801b03165b90506123ef8282612f01565b1561242f5782888761ffff168151811061240b5761240b61354e565b6001600160a01b039092166020928302919091019091015261242c86613762565b95505b8a61ffff168661ffff16106124465750505061245c565b505050808061245490613783565b915050612331565b505061ffff161515959194509092505050565b600080546001600160a01b0316331461249a5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff166124c35760405162461bcd60e51b815260040161081690613564565b6002600154036124e55760405162461bcd60e51b815260040161081690613517565b60026001556006805460ff60a81b19169055600554604051600160801b9091046001600160801b0316907f95bed6fbde15e474e4ad8a6d2aaa4a759e6e383d33f8de7c945369167ebf849090600090a26005805460109061255590600160801b90046001600160801b031661379c565b91906101000a8154816001600160801b0302191690836001600160801b031602179055506000600c5490506000600c819055506125b061259d6000546001600160a01b031690565b6002546001600160a01b03169083612afb565b5050600180805590565b600654600090600160a81b900460ff166125e657600554600160801b90046001600160801b0316612604565b60055461260490600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600190526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561268a5761268a613229565b021790555050506001600160a01b0382166000908152600a60209081526040808320815160808101835281548152600182015493810193909352600201546001600160801b0380821692840192909252600160801b90041660608201819052909103612756576040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b038a168552600a909352949092209251835590516001830155915191516001600160801b03908116600160801b029216919091176002909101555b6040516001600160801b038316906001600160a01b038516907f197eaede07bece72c8e0d907669d15a7f24328f239a5f1c28ccefc94bfadb35890600090a3505050565b6005546001600160801b0390811690831610156127e45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b6001600160a01b0381161580159061280557506001600160a01b0381163014155b61283c5760405162461bcd60e51b815260206004820152600860248201526723261d229699181960c11b6044820152606401610816565b6040805180820182526001600160801b0384168082526001600160a01b0384811660208085018281528984166000818152600b8452889020965187559051600190960180546001600160a01b031916969094169590951790925584519283529082015290917fec42a6c8c2a3b9298ec01f8c989a25ba1341377172e59d478ac6780a89451634910160405180910390a2505050565b60016001600160a01b03821660009081526007602052604090206001015460ff16600281111561290357612903613229565b146129205760405162461bcd60e51b81526004016108169061359f565b6001600160a01b0381166000908152600a60209081526040918290208251608081018452815481526001808301549382019390935260028201546001600160801b0380821695830195909552600160801b900490931660608401529161298591612f01565b6129bc5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303760c01b6044820152606401610816565b60055460028201546000916001600160801b03600160801b918290048116919092049091161015612a0357600182015482546129f891906135c1565b600083559050612a0a565b5060018101545b60006001838101829055600554600285018054600160801b9092046001600160801b03166001600160801b03199092169190911790556001600160a01b038581168352600b6020908152604093849020845180860190955280548552909201541690820181905284919015612a8157806020015191505b600254612a98906001600160a01b03168385612afb565b600554604080518581526001600160a01b0385811660208301523393600160801b90046001600160801b031692908916917f81c1b0e2611c67c291f656df4c6cd2c85bf255152046acdccd8df8a5ee303456910160405180910390a45050505050565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612b735760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610816565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006546000908190620f424090612bec90600160801b900462ffffff16826137b8565b612bfb9062ffffff16856137d4565b612c0591906137f3565b9150612c118284613671565b9050915091565b600454612c2590836135c1565b83608001511015612c635760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b806001600160a01b031683606001516001600160a01b031603612cb35760405162461bcd60e51b815260206004820152600860248201526711930e914b4c8c0d60c21b6044820152606401610816565b608083015160025460608501516040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015612d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613586565b1015612d635760405162461bcd60e51b815260206004820152600860248201526723261d229699181b60c11b6044820152606401610816565b60608301516080840151600254610a5a926001600160a01b03909116913090612f51565b60608101516080820151600254611037926001600160a01b0390911691612afb565b6000612dbe836001600160a01b038416612fdb565b9392505050565b80471015612e155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610816565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e62576040519150601f19603f3d011682016040523d82523d6000602084013e612e67565b606091505b5050905080610a5a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610816565b60606000612dbe8361302a565b6000612187825490565b6000612dbe8383613086565b6000818360200151101580612dbe5750602083015183518391612f23916135c1565b10158015612dbe575060055460608401516001600160801b03600160801b9092048216911610905092915050565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080612fd45760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610816565b5050505050565b600081815260018301602052604081205461302257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612187565b506000612187565b60608160000180548060200260200160405190810160405280929190818152602001828054801561307a57602002820191906000526020600020905b815481526020019060010190808311613066575b50505050509050919050565b600082600001828154811061309d5761309d61354e565b9060005260206000200154905092915050565b80356001600160801b03811681146130c757600080fd5b919050565b6000602082840312156130de57600080fd5b612dbe826130b0565b6001600160a01b038116811461103757600080fd5b80356130c7816130e7565b60006020828403121561311957600080fd5b8135612dbe816130e7565b60006020828403121561313657600080fd5b813562ffffff81168114612dbe57600080fd5b60006020828403121561315b57600080fd5b81358015158114612dbe57600080fd5b60008060006060848603121561318057600080fd5b833561318b816130e7565b9250613199602085016130b0565b915060408401356131a9816130e7565b809150509250925092565b600080602083850312156131c757600080fd5b823567ffffffffffffffff808211156131df57600080fd5b818501915085601f8301126131f357600080fd5b81358181111561320257600080fd5b8660208260051b850101111561321757600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052602160045260246000fd5b60006060820190506001600160801b038084511683528060208501511660208401525060408301516003811061328557634e487b7160e01b600052602160045260246000fd5b8060408401525092915050565b600080604083850312156132a557600080fd5b82356132b0816130e7565b915060208301356132c0816130e7565b809150509250929050565b6000806000606084860312156132e057600080fd5b6132e9846130b0565b92506020840135613199816130e7565b803561ffff811681146130c757600080fd5b60006020828403121561331d57600080fd5b612dbe826132f9565b60006020828403121561333857600080fd5b5035919050565b600060a0828403121561335157600080fd5b50919050565b6000806040838503121561336a57600080fd5b6132b0836130b0565b821515815260006020604081840152835180604085015260005b818110156133a95785810183015185820160600152820161338d565b818111156133bb576000606083870101525b50601f01601f191692909201606001949350505050565b600081518084526020808501945080840160005b8381101561340b5781516001600160a01b0316875295820195908201906001016133e6565b509495945050505050565b602081526000612dbe60208301846133d2565b6000806040838503121561343c57600080fd5b613445836132f9565b9150613453602084016130b0565b90509250929050565b821515815260406020820152600061347760408301846133d2565b949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260089082015267464c3a452d33303160c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b0380831681851680830382111561350e5761350e6134d6565b01949350505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526008908201526723261d229699981960c11b604082015260600190565b60006020828403121561359857600080fd5b5051919050565b60208082526008908201526711930e914b4c4c0d60c21b604082015260600190565b600082198211156135d4576135d46134d6565b500190565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135613604816130e7565b61360e81836135d9565b50602082013561361d816130e7565b61362a81600184016135d9565b506040820135613639816130e7565b61364681600284016135d9565b506060820135613655816130e7565b61366281600384016135d9565b50608082013560048201555050565b600082821015613683576136836134d6565b500390565b634e487b7160e01b600052604160045260246000fd5b600060a082840312156136b057600080fd5b60405160a0810181811067ffffffffffffffff821117156136e157634e487b7160e01b600052604160045260246000fd5b60405282356136ef816130e7565b815260208301356136ff816130e7565b6020820152613710604084016130fc565b6040820152613721606084016130fc565b6060820152608083013560808201528091505092915050565b60006001600160801b038381169083168181101561375a5761375a6134d6565b039392505050565b600061ffff808316818103613779576137796134d6565b6001019392505050565b600060018201613795576137956134d6565b5060010190565b60006001600160801b03808316818103613779576137796134d6565b600062ffffff8381169083168181101561375a5761375a6134d6565b60008160001904831182151516156137ee576137ee6134d6565b500290565b60008261381057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c634300080f000aa164736f6c634300080f000a6080604052678ac7230489e800006004557001000000000000006c6b935b8bbd400000600555600680546001600160c01b031916730a00c35000000000000000000000002e90edd0001790556000600c553480156200005d57600080fd5b50620000693362000073565b60018055620000c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61382280620000d36000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c8063715018a611610167578063d30c9952116100ce578063e70abe9211610087578063e70abe921461077c578063e9e0953f1461078f578063f09a40161461079d578063f2fde38b146107b0578063fa2e750b146107c3578063fe67a54b146107e457600080fd5b8063d30c995214610708578063db4b9dc01461071b578063db9f60ff1461072e578063dde8119f14610741578063e004f5de14610749578063e3d2400f1461075c57600080fd5b806398427177116101205780639842717714610686578063afb8327114610699578063b72ccf37146106ac578063c15ffd87146106d6578063c6e11004146106e9578063cf5303cf146106f257600080fd5b8063715018a6146105fc57806374ecaa7d146106045780637d495139146106175780637ffaa99c1461062a5780638da5cb5b1461064e5780639035b0831461067357600080fd5b80633963510b1161020b57806359a5ea75116101c457806359a5ea751461058a5780635c1a928a146105a45780635c7e9db8146105b757806360448443146105ca578063652eba9b146105e15780636b64c769146105f457600080fd5b80633963510b146104175780633bd950731461042a5780633d621e4c1461043d5780633e53ec7314610468578063501ee12614610536578063559202d51461054957600080fd5b8063219ee3941161025d578063219ee3941461037b57806326371b841461038e5780632897c4f3146103a15780632932b55e146103b457806330ccebb5146103c75780633535228c146103e757600080fd5b806303fddc0d1461029a57806306c7a236146102af57806308fe95b51461032d5780630aa0ce5c146103555780630b58e6db14610368575b600080fd5b6102ad6102a83660046130cc565b6107ec565b005b6103046102bd366004613107565b604080518082018252600080825260209182018190526001600160a01b039384168152600b8252829020825180840190935280548352600101549092169181019190915290565b60408051825181526020928301516001600160a01b031692810192909252015b60405180910390f35b60065461034290600160981b900461ffff1681565b60405161ffff9091168152602001610324565b6102ad610363366004613124565b610874565b6102ad6103763660046130cc565b61095c565b6102ad610389366004613149565b6109d4565b6102ad61039c36600461316b565b610a1c565b6102ad6103af366004613107565b610a5f565b6102ad6103c23660046131b4565b610b96565b6103da6103d5366004613107565b610d27565b604051610324919061323f565b6103fa6103f5366004613292565b610dc6565b604080519283526001600160801b03909116602083015201610324565b6102ad610425366004613107565b610e81565b6102ad610438366004613107565b611004565b600554610450906001600160801b031681565b6040516001600160801b039091168152602001610324565b6104f6610476366004613107565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600a6020908152604091829020825160808101845281548152600182015492810192909252600201546001600160801b0380821693830193909352600160801b9004909116606082015290565b604080518251815260208084015190820152828201516001600160801b039081169282019290925260609283015190911691810191909152608001610324565b6102ad610544366004613107565b61103a565b61055c6105573660046132cb565b611119565b6040805193151584526001600160a01b0390921660208401526001600160801b031690820152606001610324565b60055461045090600160801b90046001600160801b031681565b6102ad6105b236600461330b565b6111d5565b6102ad6105c5366004613107565b611252565b6105d3600c5481565b604051908152602001610324565b6102ad6105ef366004613107565b6112ca565b6102ad6113e5565b6102ad61148e565b6102ad610612366004613326565b6114c4565b6102ad61062536600461333f565b611523565b60065461063e90600160a81b900460ff1681565b6040519015158152602001610324565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610324565b6102ad610681366004613357565b611cf7565b61055c610694366004613292565b611d4c565b6102ad6106a7366004613326565b611d70565b6006546106c290600160801b900462ffffff1681565b60405162ffffff9091168152602001610324565b6102ad6106e4366004613107565b611e43565b6105d360045481565b6106fa611e73565b604051610324929190613373565b6102ad610716366004613107565b611f81565b600654610450906001600160801b031681565b6102ad61073c366004613149565b6120c5565b61045061213c565b60025461065b906001600160a01b031681565b61076f61076a3660046130cc565b612163565b6040516103249190613416565b60035461065b906001600160a01b031681565b6104506001600160801b0381565b6102ad6107ab366004613292565b61218d565b6102ad6107be366004613107565b612224565b6107d66107d1366004613429565b6122bc565b60405161032492919061345c565b61063e61246f565b6000546001600160a01b0316331461081f5760405162461bcd60e51b81526004016108169061347f565b60405180910390fd5b600680546001600160801b0319166001600160801b0383169081179091556040519081527f256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c906020015b60405180910390a150565b6000546001600160a01b0316331461089e5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156108c85760405162461bcd60e51b8152600401610816906134b4565b620f42408162ffffff161061090a5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313360c01b6044820152606401610816565b6006805462ffffff60801b1916600160801b62ffffff8416908102919091179091556040519081527f255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda90602001610869565b6000546001600160a01b031633146109865760405162461bcd60e51b81526004016108169061347f565b600580546001600160801b0319166001600160801b0383169081179091556040519081527f516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f718027290602001610869565b6000546001600160a01b031633146109fe5760405162461bcd60e51b81526004016108169061347f565b60068054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016108169061347f565b610a4f836125ba565b610a5a83838361279a565b505050565b6000546001600160a01b03163314610a895760405162461bcd60e51b81526004016108169061347f565b6001600160a01b03811660009081526007602052604090206002600182015460ff166002811115610abc57610abc613229565b14610af45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b600654600090600160a81b900460ff16610b2057600554600160801b90046001600160801b0316610b3e565b600554610b3e90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f6b4dbdf55669f6c01188b405d3882517d953fb610502150c0720131e879f876e90600090a3505050565b600260015403610bb85760405162461bcd60e51b815260040161081690613517565b60026001556003546001600160a01b03163314610c025760405162461bcd60e51b815260206004820152600860248201526723261d229698981b60c11b6044820152606401610816565b600654600160b81b900460ff16158015610c265750600654600160b01b900460ff16155b610c5d5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6006546001600160801b03163a1115610ca35760405162461bcd60e51b8152602060048201526008602482015267464c3a452d33303760c01b6044820152606401610816565b8060005b81811015610d1d576000848483818110610cc357610cc361354e565b9050602002016020810190610cd89190613107565b6001600160a01b031614610d1557610d15848483818110610cfb57610cfb61354e565b9050602002016020810190610d109190613107565b6128d1565b600101610ca7565b5050600180555050565b610d4860408051606081018252600080825260208201819052909182015290565b6001600160a01b038216600090815260076020908152604091829020825160608101845281546001600160801b038082168352600160801b90910416928101929092526001810154919290919083019060ff166002811115610dac57610dac613229565b6002811115610dbd57610dbd613229565b90525092915050565b6006546000908190600160a81b900460ff16610df45760405162461bcd60e51b815260040161081690613564565b5050600554600160801b90046001600160801b031660008181526008602090815260408083206001600160a01b0396871684528252808320948616835293815290839020835160a081018552815486168152600182015486169281019290925260028101548516938201939093526003830154909316606084015260049091015460809092018290529091565b6000546001600160a01b03163314610eab5760405162461bcd60e51b81526004016108169061347f565b600260015403610ecd5760405162461bcd60e51b815260040161081690613517565b60026001819055546001600160a01b0390811690821603610f1b5760405162461bcd60e51b815260206004820152600860248201526723261d229698981960c11b6044820152606401610816565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f889190613586565b90508015610ffb57610fb6610fa56000546001600160a01b031690565b6001600160a01b0384169083612afb565b6000546040518281526001600160a01b039091169030907f6c9d637297625e945b296ff73a71fcfbd0a9e062652b6491a921c4c60194176b9060200160405180910390a35b50506001805550565b6000546001600160a01b0316331461102e5760405162461bcd60e51b81526004016108169061347f565b611037816125ba565b50565b6000546001600160a01b031633146110645760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff161561108e5760405162461bcd60e51b8152600401610816906134b4565b6001600160a01b0381166110cf5760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3030360c41b6044820152606401610816565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc990600090a250565b600554600090819081906001600160801b03600160801b9091048116908716106111705760405162461bcd60e51b8152602060048201526008602482015267464c2d453a32303160c01b6044820152606401610816565b6001600160801b03861660009081526008602090815260408083206001600160a01b03808a1685529083528184208882168552909252909120600201541680156111c2576001935091508590506111cc565b6000935091508590505b93509350939050565b6000546001600160a01b031633146111ff5760405162461bcd60e51b81526004016108169061347f565b6006805461ffff60981b1916600160981b61ffff8481168202929092179283905560405192041681527ff20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e4890602001610869565b6000546001600160a01b0316331461127c5760405162461bcd60e51b81526004016108169061347f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b455090602001610869565b6000546001600160a01b031633146112f45760405162461bcd60e51b81526004016108169061347f565b6001600160a01b038116600090815260076020526040902060018082015460ff16600281111561132657611326613229565b146113435760405162461bcd60e51b81526004016108169061359f565b600654600090600160a81b900460ff1661136f57600554600160801b90046001600160801b031661138d565b60055461138d90600160801b90046001600160801b031660016134ec565b82546001600160801b03808316600160801b810291909216178455604051919250906001600160a01b038516907f50b47e81a29bef5bc0c09d99b7ac8fc76d78e6b3c3590301827bd4b67bc8840990600090a3505050565b6000546001600160a01b0316331461140f5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff16156114395760405162461bcd60e51b8152600401610816906134b4565b60068054600160a81b60ff60a81b19909116179055600554604051600160801b9091046001600160801b0316907f38b040053f48d9e3c983bb3a552b8323820ff833ceb2534f3099c195b105cc6c90600090a2565b6000546001600160a01b031633146114b85760405162461bcd60e51b81526004016108169061347f565b6114c26000612b79565b565b6000546001600160a01b031633146114ee5760405162461bcd60e51b81526004016108169061347f565b60048190556040518181527f7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a690602001610869565b600654600160a81b900460ff1661154c5760405162461bcd60e51b815260040161081690613564565b600654600160b01b900460ff16156115915760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303160c01b6044820152606401610816565b6002600154036115b35760405162461bcd60e51b815260040161081690613517565b60026001556115c86080820160608301613107565b6001600160a01b0316336001600160a01b0316146116135760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303360c01b6044820152606401610816565b60006007816116256020850185613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561168657611686613229565b600281111561169757611697613229565b905250905060006007816116b16040860160208701613107565b6001600160a01b031681526020808201929092526040908101600020815160608101835281546001600160801b038082168352600160801b90910416938101939093526001810154909183019060ff16600281111561171257611712613229565b600281111561172357611723613229565b905250905060018260400151600281111561174057611740613229565b1461175d5760405162461bcd60e51b81526004016108169061359f565b60028160400151600281111561177557611775613229565b146117ad5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d31303560c01b6044820152606401610816565b60055460208301516001600160801b03600160801b90920482169116116118015760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303960c01b6044820152606401610816565b60055460208201516001600160801b03600160801b90920482169116116118555760405162461bcd60e51b81526020600482015260086024820152670464c3a452d3231360c41b6044820152606401610816565b60055482516001600160801b03600160801b9092048216911611156118a75760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32313160c01b6044820152606401610816565b60055481516001600160801b03600160801b9092048216911611156118f95760405162461bcd60e51b815260206004820152600860248201526723261d229699189960c11b6044820152606401610816565b600554600160801b90046001600160801b03166000908152600860209081526040822090829061192b90870187613107565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906119609190613107565b6001600160a01b03908116825260208083019390935260409182016000908120835160a0810185528154841681526001820154841681870152600282015484169481019490945260038101549092166060840152600490910154608083015290925090600a9082906119d490880188613107565b6001600160a01b0316815260208101919091526040016000206005546002820154919250600160801b918290046001600160801b03908116929091041614801590611a1f5750805415155b15611a44578054600182018054600090611a3a9084906135c1565b9091555050600081555b600554600160801b90046001600160801b03166000908152600860209081526040822087929091611a7790840184613107565b6001600160a01b03166001600160a01b031681526020019081526020016000206000876020016020810190611aac9190613107565b6001600160a01b031681526020810191909152604001600020611acf82826135f9565b5050608082015115611b6d57600080611aeb8460800151612bc9565b91509150600080611aff8960800135612bc9565b915091508281600c54611b1291906135c1565b611b1c9190613671565b600c5584548490611b2e9084906135c1565b611b389190613671565b8555611b5b611b4c368b90038b018b61369e565b87608001518860600151612c18565b611b6486612d87565b50505050611c1d565b6005546002820154600160801b918290046001600160801b03908116929091041614611bbb576005546002820180546001600160801b03600160801b93849004811690930292169190911790555b600080611bcb8760800135612bc9565b9150915080600c6000828254611be191906135c1565b9091555050825482908490600090611bfa9084906135c1565b90915550611c1a9050611c123689900389018961369e565b600080612c18565b50505b611c54611c2d6020870187613107565b600554600160801b90046001600160801b0316600090815260096020526040902090612da9565b50600554600160801b90046001600160801b0316611c786040870160208801613107565b6001600160a01b0316611c8e6020880188613107565b6001600160a01b03167fed843d47bb78802ebc13e8996623a126d58b999326562053c253db476fb522fa611cc860608a0160408b01613107565b604080516001600160a01b03909216825260808b013560208301520160405180910390a4505060018055505050565b60013360009081526007602052604090206001015460ff166002811115611d2057611d20613229565b14611d3d5760405162461bcd60e51b81526004016108169061359f565b611d4833838361279a565b5050565b6000806000611d63611d5c61213c565b8686611119565b9250925092509250925092565b6000546001600160a01b03163314611d9a5760405162461bcd60e51b81526004016108169061347f565b600260015403611dbc5760405162461bcd60e51b815260040161081690613517565b6002600155478111611e3c57611ded81611dde6000546001600160a01b031690565b6001600160a01b031690612dc5565b6000546001600160a01b03166001600160a01b03167f90881b74cde864d3a0b48a1be016fa7c3217b5dc2b02f4f65544ff1dfa92196982604051611e3391815260200190565b60405180910390a25b5060018055565b600260015403611e655760405162461bcd60e51b815260040161081690613517565b6002600155611e3c816128d1565b600654600090606090600160b81b900460ff1680611e9a5750600654600160b01b900460ff165b80611eaf57506006546001600160801b03163a115b15611ec95750506040805160208101909152600080825291565b6006546005546000935083918291611f0391600160981b900461ffff16906107d190600190600160801b90046001600160801b031661373a565b915091508115611f6557604051600194506314995aaf60e11b90611f2b908390602401613416565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152939492505050565b6000604051806020016040528060008152509350935050509091565b6000546001600160a01b03163314611fab5760405162461bcd60e51b81526004016108169061347f565b600654600090600160a81b900460ff16611fd757600554600160801b90046001600160801b0316611ff5565b600554611ff590600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600290526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561207b5761207b613229565b0217905550506040516001600160801b03831691506001600160a01b038416907f8bbd4ebefde66f702715e863992cd517982ed361339dc6b787ed8b397213fc4b90600090a35050565b6000546001600160a01b031633146120ef5760405162461bcd60e51b81526004016108169061347f565b60068054821515600160b01b0260ff60b01b199091161790556040517fa9bfed3d98385b3777389e321dbde773cf7d335fa604fefbae3dca93564f55869061086990831515815260200190565b60055460009061215e90600190600160801b90046001600160801b031661373a565b905090565b6001600160801b038116600090815260096020526040902060609061218790612ede565b92915050565b6000546001600160a01b031633146121b75760405162461bcd60e51b81526004016108169061347f565b6121c08261103a565b6121c981611252565b600580546001600160801b0316600160801b1790556121ef678ac7230489e800006114c4565b612201686c6b935b8bbd40000061095c565b61220f642e90edd0006107ec565b61221a61c350610874565b611d48600a6111d5565b6000546001600160a01b0316331461224e5760405162461bcd60e51b81526004016108169061347f565b6001600160a01b0381166122b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610816565b61103781612b79565b600060608361ffff1667ffffffffffffffff8111156122dd576122dd613688565b604051908082528060200260200182016040528015612306578160200160208202803683370190505b506001600160801b03841660009081526009602052604081209192508061232c83612eeb565b905060005b8181101561245c5760006123458583612ef5565b6001600160a01b0381166000818152600a602090815260408083208151608081018352815481526001820154818501526002909101546001600160801b0380821683850152600160801b90910481166060830152948452600b909252822054600554949550909391929190911610156123d6576001600160a01b0383166000908152600b60205260409020546123e3565b6005546001600160801b03165b90506123ef8282612f01565b1561242f5782888761ffff168151811061240b5761240b61354e565b6001600160a01b039092166020928302919091019091015261242c86613762565b95505b8a61ffff168661ffff16106124465750505061245c565b505050808061245490613783565b915050612331565b505061ffff161515959194509092505050565b600080546001600160a01b0316331461249a5760405162461bcd60e51b81526004016108169061347f565b600654600160a81b900460ff166124c35760405162461bcd60e51b815260040161081690613564565b6002600154036124e55760405162461bcd60e51b815260040161081690613517565b60026001556006805460ff60a81b19169055600554604051600160801b9091046001600160801b0316907f95bed6fbde15e474e4ad8a6d2aaa4a759e6e383d33f8de7c945369167ebf849090600090a26005805460109061255590600160801b90046001600160801b031661379c565b91906101000a8154816001600160801b0302191690836001600160801b031602179055506000600c5490506000600c819055506125b061259d6000546001600160a01b031690565b6002546001600160a01b03169083612afb565b5050600180805590565b600654600090600160a81b900460ff166125e657600554600160801b90046001600160801b0316612604565b60055461260490600160801b90046001600160801b031660016134ec565b604080516060810182526001600160801b03808416825260208201529192508101600190526001600160a01b0383166000908152600760209081526040918290208351918401516001600160801b03908116600160801b0292169190911781559082015160018083018054909160ff199091169083600281111561268a5761268a613229565b021790555050506001600160a01b0382166000908152600a60209081526040808320815160808101835281548152600182015493810193909352600201546001600160801b0380821692840192909252600160801b90041660608201819052909103612756576040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b038a168552600a909352949092209251835590516001830155915191516001600160801b03908116600160801b029216919091176002909101555b6040516001600160801b038316906001600160a01b038516907f197eaede07bece72c8e0d907669d15a7f24328f239a5f1c28ccefc94bfadb35890600090a3505050565b6005546001600160801b0390811690831610156127e45760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b6001600160a01b0381161580159061280557506001600160a01b0381163014155b61283c5760405162461bcd60e51b815260206004820152600860248201526723261d229699181960c11b6044820152606401610816565b6040805180820182526001600160801b0384168082526001600160a01b0384811660208085018281528984166000818152600b8452889020965187559051600190960180546001600160a01b031916969094169590951790925584519283529082015290917fec42a6c8c2a3b9298ec01f8c989a25ba1341377172e59d478ac6780a89451634910160405180910390a2505050565b60016001600160a01b03821660009081526007602052604090206001015460ff16600281111561290357612903613229565b146129205760405162461bcd60e51b81526004016108169061359f565b6001600160a01b0381166000908152600a60209081526040918290208251608081018452815481526001808301549382019390935260028201546001600160801b0380821695830195909552600160801b900490931660608401529161298591612f01565b6129bc5760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303760c01b6044820152606401610816565b60055460028201546000916001600160801b03600160801b918290048116919092049091161015612a0357600182015482546129f891906135c1565b600083559050612a0a565b5060018101545b60006001838101829055600554600285018054600160801b9092046001600160801b03166001600160801b03199092169190911790556001600160a01b038581168352600b6020908152604093849020845180860190955280548552909201541690820181905284919015612a8157806020015191505b600254612a98906001600160a01b03168385612afb565b600554604080518581526001600160a01b0385811660208301523393600160801b90046001600160801b031692908916917f81c1b0e2611c67c291f656df4c6cd2c85bf255152046acdccd8df8a5ee303456910160405180910390a45050505050565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612b735760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610816565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6006546000908190620f424090612bec90600160801b900462ffffff16826137b8565b612bfb9062ffffff16856137d4565b612c0591906137f3565b9150612c118284613671565b9050915091565b600454612c2590836135c1565b83608001511015612c635760405162461bcd60e51b8152602060048201526008602482015267464c3a452d32303360c01b6044820152606401610816565b806001600160a01b031683606001516001600160a01b031603612cb35760405162461bcd60e51b815260206004820152600860248201526711930e914b4c8c0d60c21b6044820152606401610816565b608083015160025460608501516040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015612d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2a9190613586565b1015612d635760405162461bcd60e51b815260206004820152600860248201526723261d229699181b60c11b6044820152606401610816565b60608301516080840151600254610a5a926001600160a01b03909116913090612f51565b60608101516080820151600254611037926001600160a01b0390911691612afb565b6000612dbe836001600160a01b038416612fdb565b9392505050565b80471015612e155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610816565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e62576040519150601f19603f3d011682016040523d82523d6000602084013e612e67565b606091505b5050905080610a5a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610816565b60606000612dbe8361302a565b6000612187825490565b6000612dbe8383613086565b6000818360200151101580612dbe5750602083015183518391612f23916135c1565b10158015612dbe575060055460608401516001600160801b03600160801b9092048216911610905092915050565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080612fd45760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610816565b5050505050565b600081815260018301602052604081205461302257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155612187565b506000612187565b60608160000180548060200260200160405190810160405280929190818152602001828054801561307a57602002820191906000526020600020905b815481526020019060010190808311613066575b50505050509050919050565b600082600001828154811061309d5761309d61354e565b9060005260206000200154905092915050565b80356001600160801b03811681146130c757600080fd5b919050565b6000602082840312156130de57600080fd5b612dbe826130b0565b6001600160a01b038116811461103757600080fd5b80356130c7816130e7565b60006020828403121561311957600080fd5b8135612dbe816130e7565b60006020828403121561313657600080fd5b813562ffffff81168114612dbe57600080fd5b60006020828403121561315b57600080fd5b81358015158114612dbe57600080fd5b60008060006060848603121561318057600080fd5b833561318b816130e7565b9250613199602085016130b0565b915060408401356131a9816130e7565b809150509250925092565b600080602083850312156131c757600080fd5b823567ffffffffffffffff808211156131df57600080fd5b818501915085601f8301126131f357600080fd5b81358181111561320257600080fd5b8660208260051b850101111561321757600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052602160045260246000fd5b60006060820190506001600160801b038084511683528060208501511660208401525060408301516003811061328557634e487b7160e01b600052602160045260246000fd5b8060408401525092915050565b600080604083850312156132a557600080fd5b82356132b0816130e7565b915060208301356132c0816130e7565b809150509250929050565b6000806000606084860312156132e057600080fd5b6132e9846130b0565b92506020840135613199816130e7565b803561ffff811681146130c757600080fd5b60006020828403121561331d57600080fd5b612dbe826132f9565b60006020828403121561333857600080fd5b5035919050565b600060a0828403121561335157600080fd5b50919050565b6000806040838503121561336a57600080fd5b6132b0836130b0565b821515815260006020604081840152835180604085015260005b818110156133a95785810183015185820160600152820161338d565b818111156133bb576000606083870101525b50601f01601f191692909201606001949350505050565b600081518084526020808501945080840160005b8381101561340b5781516001600160a01b0316875295820195908201906001016133e6565b509495945050505050565b602081526000612dbe60208301846133d2565b6000806040838503121561343c57600080fd5b613445836132f9565b9150613453602084016130b0565b90509250929050565b821515815260406020820152600061347760408301846133d2565b949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260089082015267464c3a452d33303160c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b0380831681851680830382111561350e5761350e6134d6565b01949350505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526008908201526723261d229699981960c11b604082015260600190565b60006020828403121561359857600080fd5b5051919050565b60208082526008908201526711930e914b4c4c0d60c21b604082015260600190565b600082198211156135d4576135d46134d6565b500190565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135613604816130e7565b61360e81836135d9565b50602082013561361d816130e7565b61362a81600184016135d9565b506040820135613639816130e7565b61364681600284016135d9565b506060820135613655816130e7565b61366281600384016135d9565b50608082013560048201555050565b600082821015613683576136836134d6565b500390565b634e487b7160e01b600052604160045260246000fd5b600060a082840312156136b057600080fd5b60405160a0810181811067ffffffffffffffff821117156136e157634e487b7160e01b600052604160045260246000fd5b60405282356136ef816130e7565b815260208301356136ff816130e7565b6020820152613710604084016130fc565b6040820152613721606084016130fc565b6060820152608083013560808201528091505092915050565b60006001600160801b038381169083168181101561375a5761375a6134d6565b039392505050565b600061ffff808316818103613779576137796134d6565b6001019392505050565b600060018201613795576137956134d6565b5060010190565b60006001600160801b03808316818103613779576137796134d6565b600062ffffff8381169083168181101561375a5761375a6134d6565b60008160001904831182151516156137ee576137ee6134d6565b500290565b60008261381057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c634300080f000a68656c6c6f000000000000000000000000000000000000000000000000000000", - "nonce": "0x0", - "accessList": [] - } - } - ], - "receipts": [ - { - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "from": "0x1ba0f96bf6b26df11a58553c6db9a0314938cf70", - "to": null, - "cumulativeGasUsed": "0x702167", - "gasUsed": "0x6972fd", - "contractAddress": "0xc71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "logs": [ - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000c71cf7eb2839d864f356da13ebe22883fcbc9b0f" - ], - "data": "0x", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xa", - "removed": false - }, - { - "address": "0xc71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "topics": [ - "0xa89c1a761177532f843f74a1ba026520efa520185852784cc804d057c8b96a5f" - ], - "data": "0x000000000000000000000000bed690780a7d5fd13fe29d3fdcb800733fd62245", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xb", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x24e72a08217d19828f258be09f53f19295e0b24dbd7d8f168403e54e88af5bc9", - "0x0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270" - ], - "data": "0x", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xc", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0xf9ec8ded9c330fcb60b0909782992b5e6085ae014e7e118f82a65879761b4550" - ], - "data": "0x000000000000000000000000527a819db1eb0e34426297b03bae11f2f8b3a19e", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xd", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x7c53621bc8cfadf7f5d8872cc1143c988e482f4d902324e8500ecc9e1606f8a6" - ], - "data": "0x0000000000000000000000000000000000000000000000008ac7230489e80000", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xe", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x516cf74e5739b4ca52d0a6815192bfdf171943f4ad1202c62c9246b4f7180272" - ], - "data": "0x00000000000000000000000000000000000000000000006c6b935b8bbd400000", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0xf", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x256f5a0ca49583e4b2804a4508d650a301f067b6405a85bb12d88551c92d171c" - ], - "data": "0x0000000000000000000000000000000000000000000000000000002e90edd000", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x10", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000c350", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x11", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0xf20023a0cc018571996c523e7a756f1b75ad5337bb304a2ef210f236929c5e48" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000000a", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x12", - "removed": false - }, - { - "address": "0xbed690780a7d5fd13fe29d3fdcb800733fd62245", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x000000000000000000000000c71cf7eb2839d864f356da13ebe22883fcbc9b0f", - "0x0000000000000000000000001ba0f96bf6b26df11a58553c6db9a0314938cf70" - ], - "data": "0x", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x13", - "removed": false - }, - { - "address": "0x0000000000000000000000000000000000001010", - "topics": [ - "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", - "0x0000000000000000000000000000000000000000000000000000000000001010", - "0x0000000000000000000000001ba0f96bf6b26df11a58553c6db9a0314938cf70", - "0x0000000000000000000000001efecb61a2f80aa34d3b9218b564a64d05946290" - ], - "data": "0x00000000000000000000000000000000000000000000000004cb97062e4755500000000000000000000000000000000000000000000000005367cf285c1900000000000000000000000000000000000000000000000017f7d15dd440c4be848b0000000000000000000000000000000000000000000000004e9c38222dd1aab00000000000000000000000000000000000000000000017f7d6296b46f305d9db", - "blockHash": "0x91949e60ab2f3be2864a95108305de3c68f27ce880def48e7207c905df6df169", - "blockNumber": "0x1dce7dd", - "transactionHash": "0x01dea60687c3f77f986ed02fb17d548fe7b161d8602182c2189e3010c79e867c", - "transactionIndex": "0x1", - "logIndex": "0x14", - "removed": false - } - ], - "status": "0x1", - "logsBloom": "0x00000040040000000000000000000000180010000000000000801000000000020040000000084000000080000000000080008000080000100000000008000000200400000000000000000000008000800001040000000000000100000000020000000000120000200000000000000800002000000004000080000000000000400000000000000000000000000000000020000000000000000000108000000000200000000000000000000000010000000040000208000000000000000000004800000100000104000001000000000000400200000000000000100000000020002000004000000000000000000000000004000001000000000000000000100000", - "type": "0x2", - "effectiveGasPrice": "0xba43b7400" - } - ], - "libraries": [], - "pending": [], - "path": "broadcast/PreProxyDeploy.s.sol/137/run-latest.json", - "returns": {}, - "timestamp": 1659052009 -} \ No newline at end of file diff --git a/contracts/FastLaneFactory.sol b/contracts/FastLaneFactory.sol deleted file mode 100644 index 0cc2705..0000000 --- a/contracts/FastLaneFactory.sol +++ /dev/null @@ -1,75 +0,0 @@ -//SPDX-License-Identifier: Unlicensed -pragma solidity 0.8.16; - -import {FastLaneLegacyAuction} from "./legacy/FastLaneLegacyAuction.sol"; - - -contract FastLaneFactory { - - address public fastlane; - - mapping(uint256 => address) public gelatoOpsAddresses; - mapping(uint256 => address) public wrappedNativeAddresses; - - // Todo: Remove Unused - bytes32 private constant INIT_CODEHASH = keccak256(type(FastLaneLegacyAuction).creationCode); - - event FastLaneCreated(address fastlaneContract); - - function _createFastLane(bytes32 _salt, address _initial_bid_token, address _ops) internal { - - // use CREATE2 so we can get a deterministic address based on the salt - fastlane = address(new FastLaneLegacyAuction{salt: _salt}(msg.sender)); - - // CREATE2 can return address(0), add a check to verify this isn't the case - // See: https://eips.ethereum.org/EIPS/eip-1014 - require(fastlane != address(0), "Wrong init"); - emit FastLaneCreated(fastlane); - - FastLaneLegacyAuction(fastlane).initialSetupAuction(_initial_bid_token, _ops, msg.sender); - - } - - function getArgs() public view returns (address initial_bid_token, address ops) { - ops = gelatoOpsAddresses[block.chainid]; - initial_bid_token = wrappedNativeAddresses[block.chainid]; - } - - constructor(bytes32 _salt) { - gelatoOpsAddresses[1] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F; - gelatoOpsAddresses[137] = 0x527a819db1eb0e34426297b03bae11F2f8B3A19E; - gelatoOpsAddresses[80001] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F; - gelatoOpsAddresses[31337] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F; - - wrappedNativeAddresses[1] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; - wrappedNativeAddresses[137] = 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270; - wrappedNativeAddresses[80001] = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889; - wrappedNativeAddresses[31337] = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889; - - (address initial_bid_token, address ops) = getArgs(); - - require(ops != address(0), "O(o)ps"); - require(initial_bid_token != address(0), "Wrapped"); - - _createFastLane(_salt, initial_bid_token, ops); - } - - function getFastLaneContractBySalt(bytes32 _salt) external view returns(address predictedAddress, bool isDeployed){ - - (address initial_bid_token, address ops) = getArgs(); - - require(ops != address(0), "O(o)ps"); - require(initial_bid_token != address(0), "Wrapped"); - - predictedAddress = address(uint160(uint256(keccak256(abi.encodePacked( - bytes1(0xff), - address(this), - _salt, - keccak256(abi.encodePacked( - type(FastLaneLegacyAuction).creationCode - ) - )))))); - isDeployed = predictedAddress.code.length != 0; - } - -} \ No newline at end of file diff --git a/contracts/helpers/SearcherHelperRepayerEcho.sol b/contracts/helpers/SearcherHelperRepayerEcho.sol deleted file mode 100644 index e0d7a1d..0000000 --- a/contracts/helpers/SearcherHelperRepayerEcho.sol +++ /dev/null @@ -1,23 +0,0 @@ -//SPDX-License-Identifier: Unlicensed -pragma solidity ^0.8.16; - -// Example Contract that sends back _bidAmount to msg.sender -// It ignores _sender and _searcherCallData -// Used for testing purposes -contract SearcherHelperRepayerEcho { - function fastLaneCall( - address _sender, - uint256 _bidAmount, - bytes calldata _searcherCallData - ) external payable returns (bool, bytes memory) { - bool success; - address to = msg.sender; - assembly { - // Transfer the ETH and store if it succeeded or not. - success := call(gas(), to, _bidAmount, 0, 0, 0, 0) - } - - require(success, "ETH_TRANSFER_FAILED"); - return (true,bytes("ok")); - } -} \ No newline at end of file diff --git a/contracts/interfaces/IFastLaneAuction.sol b/contracts/interfaces/IFastLaneAuction.sol deleted file mode 100644 index e54b49b..0000000 --- a/contracts/interfaces/IFastLaneAuction.sol +++ /dev/null @@ -1,140 +0,0 @@ -pragma solidity ^0.8.10; - -interface IFastLaneAuction { - event AuctionEnded(uint128 indexed auction_number); - event AuctionStarted(uint128 indexed auction_number); - event AuctionStarterSet(address indexed starter); - event AutopayBatchSizeSet(uint16 batch_size); - event BidAdded( - address bidder, - address indexed validator, - address indexed opportunity, - uint256 amount, - uint256 indexed auction_number - ); - event BidTokenSet(address indexed token); - event FastLaneFeeSet(uint256 amount); - event MinimumAutoshipThresholdSet(uint128 amount); - event MinimumBidIncrementSet(uint256 amount); - event OpportunityAddressDisabled(address indexed opportunity, uint128 indexed auction_number); - event OpportunityAddressEnabled(address indexed opportunity, uint128 indexed auction_number); - event OpsSet(address ops); - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - event PausedStateSet(bool state); - event ResolverMaxGasPriceSet(uint128 amount); - event ValidatorAddressDisabled(address indexed validator, uint128 indexed auction_number); - event ValidatorAddressEnabled(address indexed validator, uint128 indexed auction_number); - event ValidatorPreferencesSet(address indexed validator, uint256 minAutoshipAmount, address validatorPayableAddress); - event ValidatorWithdrawnBalance( - address indexed validator, - uint128 indexed auction_number, - uint256 amount, - address destination, - address indexed caller - ); - event WithdrawStuckERC20(address indexed receiver, address indexed token, uint256 amount); - event WithdrawStuckNativeToken(address indexed receiver, uint256 amount); - - struct Bid { - address a; - address b; - address c; - address d; - uint256 e; - } - - enum statusType { - INVALID, // 0 - VALIDATOR, // 1 - OPPORTUNITY // 2 - } - struct Status { - uint128 activeAtAuctionRound; - uint128 inactiveAtAuctionRound; - statusType kind; - } - - struct ValidatorBalanceCheckpoint { - uint256 a; - uint256 b; - uint128 c; - uint128 d; - } - - struct ValidatorPreferences { - uint256 a; - address b; - } - - function MAX_AUCTION_VALUE() external view returns (uint128); - function auctionInitialized() external view returns (bool); - function auctionStarter() external view returns (address); - function auction_live() external view returns (bool); - function auction_number() external view returns (uint128); - function autopay_batch_size() external view returns (uint16); - function bid_increment() external view returns (uint256); - function bid_token() external view returns (address); - function checker() external view returns (bool canExec, bytes memory execPayload); - function disableOpportunityAddress(address _opportunityAddress) external; - function disableValidatorAddress(address _validatorAddress) external; - function enableOpportunityAddress(address _opportunityAddress) external; - function enableValidatorAddress(address _validatorAddress) external; - function enableValidatorAddressWithPreferences( - address _validatorAddress, - uint128 _minAutoshipAmount, - address _validatorPayableAddress - ) - external; - function endAuction() external returns (bool); - function fast_lane_fee() external view returns (uint24); - function findFinalizedAuctionWinnerAtAuction( - uint128 auction_index, - address validatorAddress, - address opportunityAddress - ) - external - view - returns (bool, address, uint128); - function findLastFinalizedAuctionWinner(address validatorAddress, address opportunityAddress) - external - view - returns (bool, address, uint128); - function findLiveAuctionTopBid(address validatorAddress, address opportunityAddress) - external - view - returns (uint256, uint128); - function getActivePrivilegesAuctionNumber() external view returns (uint128); - function getAutopayJobs(uint16 batch_size, uint128 auction_index) - external - view - returns (bool hasJobs, address[] memory autopayRecipients); - function getCheckpoint(address who) external view returns (ValidatorBalanceCheckpoint memory); - function getPreferences(address who) external view returns (ValidatorPreferences memory); - function getStatus(address who) external view returns (Status memory); - function getValidatorsactiveAtAuctionRound(uint128 auction_index) external view returns (address[] memory); - function initialSetupAuction(address _initial_bid_token, address _ops, address _starter) external; - function max_gas_price() external view returns (uint128); - function minAutoShipThreshold() external view returns (uint128); - function ops() external view returns (address); - function outstandingFLBalance() external view returns (uint256); - function owner() external view returns (address); - function processAutopayJobs(address[] memory autopayRecipients) external; - function redeemOutstandingBalance(address _outstandingValidatorWithBalance) external; - function renounceOwnership() external; - function setAutopayBatchSize(uint16 _size) external; - function setBidToken(address _bid_token_address) external; - function setFastlaneFee(uint24 _fastLaneFee) external; - function setMinimumAutoShipThreshold(uint128 _minAmount) external; - function setMinimumBidIncrement(uint256 _bid_increment) external; - function setOffchainCheckerDisabledState(bool _state) external; - function setOps(address _ops) external; - function setPausedState(bool _state) external; - function setResolverMaxGasPrice(uint128 _maxgas) external; - function setStarter(address _starter) external; - function setValidatorPreferences(uint128 _minAutoshipAmount, address _validatorPayableAddress) external; - function startAuction() external; - function submitBid(Bid memory bid) external; - function transferOwnership(address newOwner) external; - function withdrawStuckERC20(address _tokenAddress) external; - function withdrawStuckNativeToken(uint256 _amount) external; -} diff --git a/contracts/legacy/FastLaneAuction.sol.inheritance-graph.dot b/contracts/legacy/FastLaneAuction.sol.inheritance-graph.dot deleted file mode 100644 index 621ae37..0000000 --- a/contracts/legacy/FastLaneAuction.sol.inheritance-graph.dot +++ /dev/null @@ -1,24 +0,0 @@ -digraph "" { -Ownable -> Context; -Ownable[shape="box"label=<
Ownable
Public Functions:
owner()
renounceOwnership()
transferOwnership(address)
Private Functions:
_checkOwner()
_transferOwnership(address)
Modifiers:
onlyOwner()
Private Variables:
_owner
>]; - -ReentrancyGuard[shape="box"label=<
ReentrancyGuard
Private Functions:
_nonReentrantBefore()
_nonReentrantAfter()
Modifiers:
nonReentrant()
Private Variables:
_NOT_ENTERED
_ENTERED
_status
>]; - -Address[shape="box"label=<
Address
Private Functions:
isContract(address)
sendValue(address,uint256)
functionCall(address,bytes)
functionCall(address,bytes,string)
functionCallWithValue(address,bytes,uint256)
functionCallWithValue(address,bytes,uint256,string)
functionStaticCall(address,bytes)
functionStaticCall(address,bytes,string)
functionDelegateCall(address,bytes)
functionDelegateCall(address,bytes,string)
verifyCallResultFromTarget(address,bool,bytes,string)
verifyCallResult(bool,bytes,string)
_revert(bytes,string)
>]; - -Context[shape="box"label=<
Context
Private Functions:
_msgSender()
_msgData()
>]; - -EnumerableSet[shape="box"label=<
EnumerableSet
Private Functions:
_add(EnumerableSet.Set,bytes32)
_remove(EnumerableSet.Set,bytes32)
_contains(EnumerableSet.Set,bytes32)
_length(EnumerableSet.Set)
_at(EnumerableSet.Set,uint256)
_values(EnumerableSet.Set)
add(EnumerableSet.Bytes32Set,bytes32)
remove(EnumerableSet.Bytes32Set,bytes32)
contains(EnumerableSet.Bytes32Set,bytes32)
length(EnumerableSet.Bytes32Set)
at(EnumerableSet.Bytes32Set,uint256)
values(EnumerableSet.Bytes32Set)
add(EnumerableSet.AddressSet,address)
remove(EnumerableSet.AddressSet,address)
contains(EnumerableSet.AddressSet,address)
length(EnumerableSet.AddressSet)
at(EnumerableSet.AddressSet,uint256)
values(EnumerableSet.AddressSet)
add(EnumerableSet.UintSet,uint256)
remove(EnumerableSet.UintSet,uint256)
contains(EnumerableSet.UintSet,uint256)
length(EnumerableSet.UintSet)
at(EnumerableSet.UintSet,uint256)
values(EnumerableSet.UintSet)
>]; - -ERC20[shape="box"label=<
ERC20
Public Functions:
approve(address,uint256)
transfer(address,uint256)
transferFrom(address,address,uint256)
permit(address,address,uint256,uint256,uint8,bytes32,bytes32)
DOMAIN_SEPARATOR()
Private Functions:
computeDomainSeparator()
_mint(address,uint256)
_burn(address,uint256)
Public Variables:
name
symbol
decimals
totalSupply
balanceOf
allowance
nonces
Private Variables:
INITIAL_CHAIN_ID
INITIAL_DOMAIN_SEPARATOR
>]; - -SafeTransferLib[shape="box"label=<
SafeTransferLib
Private Functions:
safeTransferETH(address,uint256)
safeTransferFrom(ERC20,address,address,uint256)
safeTransfer(ERC20,address,uint256)
safeApprove(ERC20,address,uint256)
>]; - -FastLaneEvents[shape="box"label=<
FastLaneEvents
>]; - -FastLaneAuction -> FastLaneEvents [ label="1" ]; -FastLaneAuction -> Ownable [ label="2" ]; -FastLaneAuction -> ReentrancyGuard [ label="3" ]; -FastLaneAuction[shape="box"label=<
FastLaneAuction
Public Functions:
initialSetupAuction(address,address,address)
setValidatorPreferences(uint128,address)
setPausedState(bool)
setMinimumBidIncrement(uint256)
setOps(address)
setMinimumAutoShipThreshold(uint128)
setResolverMaxGasPrice(uint128)
setFastlaneFee(uint24)
setBidToken(address)
setStarter(address)
enableOpportunityAddress(address)
disableOpportunityAddress(address)
enableValidatorAddress(address)
enableValidatorAddressWithPreferences(address,uint128,address)
disableValidatorAddress(address)
startAuction()
endAuction()
setAutopayBatchSize(uint16)
setOffchainCheckerDisabledState(bool)
withdrawStuckNativeToken(uint256)
withdrawStuckERC20(address)
submitBid(Bid)
redeemOutstandingBalance(address)
checker()
processAutopayJobs(address[])
getAutopayJobs(uint16,uint128)
getStatus(address)
getValidatorsactiveAtAuctionRound(uint128)
getActivePrivilegesAuctionNumber()
getCheckpoint(address)
getPreferences(address)
findLiveAuctionTopBid(address,address)
findFinalizedAuctionWinnerAtAuction(uint128,address,address)
findLastFinalizedAuctionWinner(address,address)
Private Functions:
_updateValidatorPreferences(address,uint128,address)
_enableValidatorCheckpoint(address)
_receiveBid(Bid,uint256,address)
_refundPreviousBidder(Bid)
_calculateCuts(uint256)
_checkRedeemableOutstanding(ValidatorBalanceCheckpoint,uint256)
_redeemOutstanding(address)
Modifiers:
notLiveStage()
atLiveStage()
whenNotPaused()
onlyValidator()
onlyOwnerStarterOps()
onlyStarterOrOwner()
Public Variables:
bid_token (ERC20)
ops
bid_increment
minAutoShipThreshold
auction_number
MAX_AUCTION_VALUE
max_gas_price
fast_lane_fee
autopay_batch_size
auction_live
outstandingFLBalance
auctionStarter
auctionInitialized
Private Variables:
paused
_offchain_checker_disabled
statusMap
auctionsMap
validatorsactiveAtAuctionRound
validatorsCheckpoints
validatorsPreferences
>]; - -} \ No newline at end of file diff --git a/contracts/legacy/FastLaneLegacyAuction.sol b/contracts/legacy/FastLaneLegacyAuction.sol deleted file mode 100644 index f3f181d..0000000 --- a/contracts/legacy/FastLaneLegacyAuction.sol +++ /dev/null @@ -1,964 +0,0 @@ -//SPDX-License-Identifier: Unlicensed -pragma solidity 0.8.16; - -import "openzeppelin-contracts/contracts/utils/Address.sol"; -import { SafeTransferLib, ERC20 } from "solmate/utils/SafeTransferLib.sol"; -import { ReentrancyGuard } from "solmate/utils/ReentrancyGuard.sol"; -import "openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol"; -import "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; -import "openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol"; -import "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol"; - - -/// @notice Auction bid struct -/// @dev Current owners need to allow opportunity and validator addresses to participate beforehands -/// @param validatorAddress Validator selected for the bid -/// @param opportunityAddress Opportunity selected for the bid -/// @param searcherContractAddress Contract that will be submitting transactions to `opportunityAddress` -/// @param searcherPayableAddress Searcher submitting the bid (currently restricted to msg.sender) -/// @param bidAmount Value of the bid -struct Bid { - address validatorAddress; - address opportunityAddress; - address searcherContractAddress; - address searcherPayableAddress; - uint256 bidAmount; -} - -/// @notice The type of a Status struct validator or opportunity -enum statusType { - INVALID, // 0 - VALIDATOR, // 1 - OPPORTUNITY // 2 -} - -/// @notice Status of validator or opportunity -/// @dev Status cannot be flipped for the current round, an opportunity or validator set up as inactive will always be able to receive bids until the end of the round it was triggered. -/// @param activeAtAuctionRound Auction round where entity will be enabled -/// @param inactiveAtAuctionRound Auction round at which entity will be disabled -/// @param kind From {statusType} -struct Status { - uint128 activeAtAuctionRound; - uint128 inactiveAtAuctionRound; - statusType kind; -} - - -/// @notice Validator Balance Checkpoint -/// @dev By default checkpoints are checked every block by ops to see if there is amount to be paid ( > minAmount or > minAmoutForValidator) -/// @param pendingBalanceAtlastBid Deposits at `lastBidReceivedAuction` -/// @param outstandingBalance Balance accumulated between `lastWithdrawnAuction` and `lastBidReceivedAuction` -/// @param lastWithdrawnAuction Round when the validator withdrew -/// @param lastBidReceivedAuction Last auction around a bid was received for this validator -struct ValidatorBalanceCheckpoint { - uint256 pendingBalanceAtlastBid; - uint256 outstandingBalance; - uint128 lastWithdrawnAuction; - uint128 lastBidReceivedAuction; -} - -/// @notice Validator Balances Shipping Preferences -/// @dev minAutoshipAmount will always be superseeded by contract level minAutoShipThreshold if lower -/// @param minAutoshipAmount Validator desired autoship threshold -/// @param validatorPayableAddress Validator desired payable address -struct ValidatorPreferences { - uint256 minAutoshipAmount; - address validatorPayableAddress; -} - - -abstract contract FastLaneEvents { - /***********************************| - | Events | - |__________________________________*/ - - event MinimumBidIncrementSet(uint256 amount); - event FastLaneFeeSet(uint256 amount); - event BidTokenSet(address indexed token); - event PausedStateSet(bool state); - event OpsSet(address ops); - event MinimumAutoshipThresholdSet(uint128 amount); - event ResolverMaxGasPriceSet(uint128 amount); - event AutopayBatchSizeSet(uint16 batch_size); - event OpportunityAddressEnabled( - address indexed opportunity, - uint128 indexed auction_number - ); - event OpportunityAddressDisabled( - address indexed opportunity, - uint128 indexed auction_number - ); - event ValidatorAddressEnabled( - address indexed validator, - uint128 indexed auction_number - ); - event ValidatorAddressDisabled( - address indexed validator, - uint128 indexed auction_number - ); - event ValidatorWithdrawnBalance( - address indexed validator, - uint128 indexed auction_number, - uint256 amount, - address destination, - address indexed caller - - ); - event AuctionStarted(uint128 indexed auction_number); - - event AuctionEnded(uint128 indexed auction_number); - - event AuctionStarterSet(address indexed starter); - - event WithdrawStuckERC20( - address indexed receiver, - address indexed token, - uint256 amount - ); - event WithdrawStuckNativeToken(address indexed receiver, uint256 amount); - - event BidAdded( - address bidder, - address indexed validator, - address indexed opportunity, - uint256 amount, - uint256 indexed auction_number - ); - - event ValidatorPreferencesSet(address indexed validator, uint256 minAutoshipAmount, address validatorPayableAddress); - - error GeneralFailure(); // E-000 // 0x2192efec - - error PermissionPaused(); // E-101 // 0xeaa8b1af - error PermissionNotOwner(); // E-102 // 0xf599ea9e - error PermissionOnlyFromPayorEoa(); // E-103 // 0x13272381 - error PermissionMustBeValidator(); // E-104 // 0x4f4e9f3f - error PermissionInvalidOpportunityAddress(); // E-105 // 0xcf440a8e - error PermissionOnlyOps(); // E-106 // 0x68da148f - error PermissionNotOwnerNorStarter(); // E-107 // 0x8b4fb0bf - error PermissionNotAllowed(); // E-108 // 0xba6c5093 - - error InequalityInvalidIndex(); // E-201 // 0x102bd785 - error InequalityAddressMismatch(); // E-202 // 0x17de231a - error InequalityTooLow(); // E-203 // 0x470b0adc - error InequalityAlreadyTopBidder(); // E-204 // 0xeb14a775 - error InequalityNotEnoughFunds(); // E-206 // 0x4587f24a - error InequalityNothingToRedeem(); // E-207 // 0x77a3b272 - error InequalityValidatorDisabledAtTime(); // E-209 // 0xa1ec46e6 - error InequalityOpportunityDisabledAtTime(); // E-210 // 0x8c81d8e9 - error InequalityValidatorNotEnabledYet(); // E-211 // 0x7a956c2e - error InequalityOpportunityNotEnabledYet(); // E-212 // 0x333108d7 - error InequalityTooHigh(); // E-213 // 0xfd11d092 - error InequalityWrongToken(); // E-214 // 0xc9db890c - - error TimeNotWhenAuctionIsLive(); // E-301 // 0x76a79c50 - error TimeNotWhenAuctionIsStopped(); // E-302 // 0x4eaf4896 - error TimeGasNotSuitable(); // E-307 // 0xdd980aae - error TimeAlreadyInit(); // E-308 // 0xef34ca5c - -} - -/// @title FastLaneAuction -/// @author Elyx0 -/// @notice Fastlane.finance auction contract -contract FastLaneLegacyAuction is Initializable, OwnableUpgradeable , UUPSUpgradeable, ReentrancyGuard, FastLaneEvents { - using Address for address payable; - using EnumerableSet for EnumerableSet.AddressSet; - using SafeTransferLib for ERC20; - - ERC20 public bid_token; - - constructor(address _newOwner) { - _transferOwnership(_newOwner); - _disableInitializers(); - } - - function initialize(address _newOwner) public initializer { - __Ownable_init(); - __UUPSUpgradeable_init(); - _transferOwnership(_newOwner); - } - - function _authorizeUpgrade(address) internal virtual override onlyOwner() {} - - - /// @notice Initializes the auction - /// @dev Also sets bid increment, resolver max gas, fee, autoship and batch size. - /// @param _initial_bid_token ERC20 address to use for the auction - /// @param _ops Operators address for crontabs - /// @param _starter Address allowed to start/stop rounds - function initialSetupAuction(address _initial_bid_token, address _ops, address _starter) external onlyOwner { - if (auctionInitialized) revert TimeAlreadyInit(); - setBidToken(_initial_bid_token); - setOps(_ops); - auction_number = 1; - setMinimumBidIncrement(10* (10**18)); - setMinimumAutoShipThreshold(2000* (10**18)); - setResolverMaxGasPrice(200 gwei); - setFastlaneFee(50000); - setAutopayBatchSize(10); - setStarter(_starter); - auctionInitialized = true; - } - - /// @notice Gelato Ops Address - address public ops; - - // Variables mutable by owner via function calls - - /// @notice Minimum bid increment required on top of from the current top bid for a pair - uint256 public bid_increment = 10 * (10**18); - - - /// @notice Minimum amount for Validator Preferences to get the profits airdropped - uint128 public minAutoShipThreshold = 2000 * (10**18); // Validators balances > 2k should get auto-transfered - - /// @notice Current auction round, - /// @dev Offset by 1 so payouts are at 0. In general payouts are for round n-1. - uint128 public auction_number = 1; - - uint128 public constant MAX_AUCTION_VALUE = type(uint128).max; // 2**128 - 1 - - /// @notice Max gas price for ops to attempt autopaying pending balances over threshold - uint128 public max_gas_price = 200 gwei; - - /// @notice Fee (out of one million) - uint24 public fast_lane_fee = 50000; - - /// @notice Number of validators to pay per gelato action - uint16 public autopay_batch_size = 10; - - /// @notice Auction live status - bool public auction_live = false; - - bool internal paused = false; - - /// @notice Ops crontab disabled - bool internal _offchain_checker_disabled = false; - - /// @notice Tracks status of seen addresses and when they become eligible for bidding - mapping(address => Status) internal statusMap; - - /// @notice Tracks bids per auction_number per pair - mapping(uint256 => mapping(address => mapping(address => Bid))) - internal auctionsMap; - - /// @notice Validators participating in the auction for a round - mapping(uint128 => EnumerableSet.AddressSet) internal validatorsactiveAtAuctionRound; - - /// @notice Validators cuts to be withdraw or dispatched regularly - mapping(address => ValidatorBalanceCheckpoint) internal validatorsCheckpoints; - - /// @notice Validator preferences for payment and min autoship amount - mapping(address => ValidatorPreferences) internal validatorsPreferences; - - /// @notice Auto cleared by EndAuction every round - uint256 public outstandingFLBalance = 0; - - /// @notice Start & Stop auction role - address public auctionStarter; - - /// @notice Auction was initialized - bool public auctionInitialized = false; - - /// @notice Internally updates a validator preference - /// @dev Only callable by an already setup validator, and only for themselves via {setValidatorPreferences} - /// @param _target Validator to update - /// @param _minAutoshipAmount Amount desired before autoship kicks in - /// @param _validatorPayableAddress Address the auction proceeds will go to for this validator - function _updateValidatorPreferences(address _target, uint128 _minAutoshipAmount, address _validatorPayableAddress) internal { - if(_minAutoshipAmount < minAutoShipThreshold) revert InequalityTooLow(); - if((_validatorPayableAddress == address(0)) || (_validatorPayableAddress == address(this))) revert InequalityAddressMismatch(); - - validatorsPreferences[_target] = ValidatorPreferences(_minAutoshipAmount, _validatorPayableAddress); - emit ValidatorPreferencesSet(_target,_minAutoshipAmount, _validatorPayableAddress); - } - - /***********************************| - | Validator-only | - |__________________________________*/ - - /// @notice Internally updates a validator preference - /// @dev Only callable by an already setup validator via {onlyValidator} - /// @param _minAutoshipAmount Amount desired before autoship kicks in - /// @param _validatorPayableAddress Address the auction proceeds will go to for this validator - function setValidatorPreferences(uint128 _minAutoshipAmount, address _validatorPayableAddress) external onlyValidator { - _updateValidatorPreferences(msg.sender, _minAutoshipAmount, _validatorPayableAddress); - } - - /***********************************| - | Owner-only | - |__________________________________*/ - - /// @notice Defines the paused state of the Auction - /// @dev Only owner - /// @param _state New state - function setPausedState(bool _state) external onlyOwner { - paused = _state; - emit PausedStateSet(_state); - } - - /// @notice Sets minimum bid increment - /// @dev Used to avoid people micro-bidding up by .000000001 - /// @param _bid_increment New increment - function setMinimumBidIncrement(uint256 _bid_increment) public onlyOwner { - bid_increment = _bid_increment; - emit MinimumBidIncrementSet(_bid_increment); - } - - /// @notice Sets address of Ops - /// @dev Ops is allowed to call {processAutopayJobs} - /// @param _ops New operator of crontabs - function setOps(address _ops) public onlyOwner { - ops = _ops; - emit OpsSet(_ops); - } - - /// @notice Sets minimum balance a checkpoint must meet to be considered for autoship - /// @dev This amount will always override validator preferences if greater - /// @param _minAmount Minimum amount - function setMinimumAutoShipThreshold(uint128 _minAmount) public onlyOwner { - minAutoShipThreshold = _minAmount; - emit MinimumAutoshipThresholdSet(_minAmount); - } - - /// @notice Sets maximum network gas for autoship - /// @dev Past this value autoship will have to be manually called until gwei goes lower or this gets upped - /// @param _maxgas Maximum gas - function setResolverMaxGasPrice(uint128 _maxgas) public onlyOwner { - max_gas_price = _maxgas; - emit ResolverMaxGasPriceSet(_maxgas); - } - - /// @notice Sets the protocol fee (out of 1000000 (ie v2 fee decimals)) - /// @dev Initially set to 50000 (5%) For now we can't change the fee during an ongoing auction since the bids do not store the fee value at bidding time - /// @param _fastLaneFee Protocl fee on bids - function setFastlaneFee(uint24 _fastLaneFee) - public - onlyOwner - notLiveStage - { - if (_fastLaneFee > 1000000) revert InequalityTooHigh(); - fast_lane_fee = _fastLaneFee; - emit FastLaneFeeSet(_fastLaneFee); - } - - /// @notice Sets the ERC20 token that is treated as the base currency for bidding purposes - /// @dev Initially set to WMATIC, changing it is not allowed during auctions, special considerations must be taken care of if changing this value, such as paying all outstanding validators first to not mix ERC's. - /// @param _bid_token_address Address of the bid token - function setBidToken(address _bid_token_address) - public - onlyOwner - notLiveStage - { - // Prevent QBridge Finance issues - if (_bid_token_address == address(0)) revert GeneralFailure(); - bid_token = ERC20(_bid_token_address); - emit BidTokenSet(_bid_token_address); - } - - - /// @notice Sets the auction starter role - /// @dev Both owner and starter will be able to trigger starts/stops - /// @param _starter Address of the starter role - function setStarter(address _starter) public onlyOwner { - auctionStarter = _starter; - emit AuctionStarterSet(auctionStarter); - } - - - /// @notice Adds an address to the allowed entity mapping as opportunity - /// @dev Should be a router/aggregator etc. Opportunities are queued to the next auction - /// @dev Do not use on already enabled opportunity or it will be stopped for current auction round - /// @param _opportunityAddress Address of the opportunity - function enableOpportunityAddress(address _opportunityAddress) - external - onlyOwner - { - // Enable for after auction ends if live - uint128 target_auction_number = auction_live ? auction_number + 1 : auction_number; - statusMap[_opportunityAddress] = Status(target_auction_number, MAX_AUCTION_VALUE, statusType.OPPORTUNITY); - emit OpportunityAddressEnabled(_opportunityAddress, target_auction_number); - } - - /// @notice Disables an opportunity - /// @dev If auction is live, only takes effect at next round - /// @param _opportunityAddress Address of the opportunity - function disableOpportunityAddress(address _opportunityAddress) - external - onlyOwner - { - Status storage existingStatus = statusMap[_opportunityAddress]; - if (existingStatus.kind != statusType.OPPORTUNITY) revert PermissionInvalidOpportunityAddress(); - uint128 target_auction_number = auction_live ? auction_number + 1 : auction_number; - - existingStatus.inactiveAtAuctionRound = target_auction_number; - emit OpportunityAddressDisabled(_opportunityAddress, target_auction_number); - } - - /// @notice Internal, enables a validator checkpoint - /// @dev If auction is live, only takes effect at next round - /// @param _validatorAddress Address of the validator - function _enableValidatorCheckpoint(address _validatorAddress) internal { - uint128 target_auction_number = auction_live ? auction_number + 1 : auction_number; - statusMap[_validatorAddress] = Status(target_auction_number, MAX_AUCTION_VALUE, statusType.VALIDATOR); - - // Create the checkpoint for the Validator - ValidatorBalanceCheckpoint memory valCheckpoint = validatorsCheckpoints[_validatorAddress]; - if (valCheckpoint.lastBidReceivedAuction == 0) { - validatorsCheckpoints[_validatorAddress] = ValidatorBalanceCheckpoint(0, 0, 0, 0); - } - emit ValidatorAddressEnabled(_validatorAddress, target_auction_number); - } - - /// @notice Enables a validator checkpoint - /// @dev If auction is live, only takes effect at next round - /// @param _validatorAddress Address of the validator - function enableValidatorAddress(address _validatorAddress) - external - onlyOwner - { - _enableValidatorCheckpoint(_validatorAddress); - } - - /// @notice Enables a validator checkpoint and sets preferences - /// @dev If auction is live, only takes effect at next round - /// @param _validatorAddress Address of the validator - /// @param _minAutoshipAmount Amount desired before autoship kicks in - /// @param _validatorPayableAddress Address the auction proceeds will go to for this validator - function enableValidatorAddressWithPreferences(address _validatorAddress, uint128 _minAutoshipAmount, address _validatorPayableAddress) - external - onlyOwner - { - _enableValidatorCheckpoint(_validatorAddress); - _updateValidatorPreferences(_validatorAddress, _minAutoshipAmount, _validatorPayableAddress); - } - - /// @notice Disables a validator - /// @dev If auction is live, only takes effect at next round - /// @param _validatorAddress Address of the validator - function disableValidatorAddress(address _validatorAddress) - external - onlyOwner - { - Status storage existingStatus = statusMap[_validatorAddress]; - if (existingStatus.kind != statusType.VALIDATOR) revert PermissionMustBeValidator(); - uint128 target_auction_number = auction_live ? auction_number + 1 : auction_number; - - existingStatus.inactiveAtAuctionRound = target_auction_number; - emit ValidatorAddressDisabled(_validatorAddress, target_auction_number); - } - - /// @notice Start auction round / Enable bidding - /// @dev Both starter and owner roles are allowed to start - function startAuction() external onlyStarterOrOwner notLiveStage { - auction_live = true; - emit AuctionStarted(auction_number); - } - - /// @notice Ends an auction round - /// @dev Ending an auction round transfers the cuts to PFL and enables validators to collect theirs from the auction that ended - /// @dev Also enables fastlane privileges of pairs winners until endAuction gets called again at next auction round - function endAuction() - external - onlyStarterOrOwner - atLiveStage - nonReentrant - returns (bool) - { - - auction_live = false; - - emit AuctionEnded(auction_number); - - // Increment auction_number so the checkpoints are available. - ++auction_number; - - uint256 ownerBalance = outstandingFLBalance; - outstandingFLBalance = 0; - - // Last for C-E-I. - bid_token.safeTransfer(owner(), ownerBalance); - - return true; - } - - /// @notice Sets autopay batch size - /// @dev Defines the maximum number of addresses the ops will try to pay outstanding balances per block - /// @param _size Size of the batch - function setAutopayBatchSize(uint16 _size) public onlyOwner { - autopay_batch_size = _size; - emit AutopayBatchSizeSet(autopay_batch_size); - } - - /// @notice Defines if the offchain checked is disabled - /// @dev If true autoship will be disabled - /// @param _state Disabled state - function setOffchainCheckerDisabledState(bool _state) external onlyOwner { - _offchain_checker_disabled = _state; - } - - /// @notice Withdraws stuck matic - /// @dev In the event people send matic instead of WMATIC we can send it back - /// @param _amount Amount to send to owner - function withdrawStuckNativeToken(uint256 _amount) - external - onlyOwner - nonReentrant - { - if (address(this).balance >= _amount) { - payable(owner()).sendValue(_amount); - emit WithdrawStuckNativeToken(owner(), _amount); - } - } - - /// @notice Withdraws stuck ERC20 - /// @dev In the event people send ERC20 instead of bid_token ERC20 we can send them back - /// @param _tokenAddress Address of the stuck token - function withdrawStuckERC20(address _tokenAddress) - external - onlyOwner - nonReentrant - { - if (_tokenAddress == address(bid_token)) revert InequalityWrongToken(); - ERC20 oopsToken = ERC20(_tokenAddress); - uint256 oopsTokenBalance = oopsToken.balanceOf(address(this)); - - if (oopsTokenBalance > 0) { - oopsToken.safeTransfer(owner(), oopsTokenBalance); - emit WithdrawStuckERC20(address(this), owner(), oopsTokenBalance); - } - } - - /// @notice Internal, receives a bid - /// @dev Requires approval of this contract beforehands - /// @param _currentTopBidAmount Value of the current top bid - /// @param _currentTopBidSearcherPayableAddress Address of the current top bidder for that bid pair - function _receiveBid( - Bid memory bid, - uint256 _currentTopBidAmount, - address _currentTopBidSearcherPayableAddress - ) internal { - // Verify the bid exceeds previous bid + minimum increment - if (bid.bidAmount < _currentTopBidAmount + bid_increment) revert InequalityTooLow(); - - // Verify the new bidder isnt the previous bidder as self-spam protection - if (bid.searcherPayableAddress == _currentTopBidSearcherPayableAddress) revert InequalityAlreadyTopBidder(); - - // Verify the bidder has the balance. - if (bid_token.balanceOf(bid.searcherPayableAddress) < bid.bidAmount) revert InequalityNotEnoughFunds(); - - // Transfer the bid amount (requires approval) - bid_token.safeTransferFrom( - bid.searcherPayableAddress, - address(this), - bid.bidAmount - ); - } - - /// @notice Internal, refunds previous top bidder - /// @dev Be very careful about changing bid token to any ERC777 - /// @param bid Bid to refund - function _refundPreviousBidder(Bid memory bid) internal { - bid_token.safeTransfer( - bid.searcherPayableAddress, - bid.bidAmount - ); - } - - /// @notice Internal, calculates cuts - /// @dev vCut - /// @param amount Amount to calculates cuts from - /// @return vCut validator cut - /// @return flCut protocol cut - function _calculateCuts(uint256 amount) internal view returns (uint256 vCut, uint256 flCut) { - vCut = (amount * (1000000 - fast_lane_fee)) / 1000000; - flCut = amount - vCut; - } - - /// @notice Internal, calculates if a validator balance checkpoint is redeemable as of current auction_number against a certain amount - /// @dev Not pure, depends of global auction_number, could be only outstandingBalance or outstandingBalance + pendingBalanceAtlastBid if last bid was at an oldest round than auction_number - /// @param valCheckpoint Validator checkpoint to validate against `minAmount` - /// @param minAmount Amount to calculates cuts from - /// @return bool Is there balance to redeem for validator and amount at current auction_number - function _checkRedeemableOutstanding(ValidatorBalanceCheckpoint memory valCheckpoint,uint256 minAmount) internal view returns (bool) { - return valCheckpoint.outstandingBalance >= minAmount || ((valCheckpoint.lastBidReceivedAuction < auction_number) && ((valCheckpoint.pendingBalanceAtlastBid + valCheckpoint.outstandingBalance) >= minAmount)); - } - - /// @notice Internal, attemps to redeem a validator outstanding balance to its validatorPayableAddress - /// @dev Must be owed at least 1 of `bid_token` - /// @param _outstandingValidatorWithBalance Validator address - function _redeemOutstanding(address _outstandingValidatorWithBalance) internal { - if (statusMap[_outstandingValidatorWithBalance].kind != statusType.VALIDATOR) revert PermissionMustBeValidator(); - ValidatorBalanceCheckpoint storage valCheckpoint = validatorsCheckpoints[_outstandingValidatorWithBalance]; - - // Either we have outstandingBalance or we have pendingBalanceAtlastBid from previous auctions. - if (!_checkRedeemableOutstanding(valCheckpoint, 1)) revert InequalityNothingToRedeem(); - - uint256 redeemable = 0; - if (valCheckpoint.lastBidReceivedAuction < auction_number) { - // We can redeem both - redeemable = valCheckpoint.pendingBalanceAtlastBid + valCheckpoint.outstandingBalance; - valCheckpoint.pendingBalanceAtlastBid = 0; - } else { - // Another bid was received in the current auction, profits were already moved - // to outstandingBalance by the bidder - redeemable = valCheckpoint.outstandingBalance; - } - - // Clear outstanding in any case. - valCheckpoint.outstandingBalance = 0; - valCheckpoint.lastWithdrawnAuction = auction_number; - - address dst = _outstandingValidatorWithBalance; - ValidatorPreferences memory valPrefs = validatorsPreferences[dst]; - if (valPrefs.validatorPayableAddress != address(0)) { - dst = valPrefs.validatorPayableAddress; - } - - bid_token.safeTransfer( - dst, - redeemable - ); - - emit ValidatorWithdrawnBalance( - _outstandingValidatorWithBalance, - auction_number, - redeemable, - dst, - msg.sender - ); - } - - /***********************************| - | Public | - |__________________________________*/ - - - /// @notice Bidding function for searchers to submit their bids - /// @dev Each bid pulls funds on submission and searchers are refunded when they are outbid - /// @param bid Bid struct as tuple (validatorAddress, opportunityAddress, searcherContractAddress ,searcherPayableAddress, bidAmount) - function submitBid(Bid calldata bid) - external - atLiveStage - whenNotPaused - nonReentrant - { - // Verify that the bid is coming from the EOA that's paying - if (msg.sender != bid.searcherPayableAddress) revert PermissionOnlyFromPayorEoa(); - - Status memory validatorStatus = statusMap[bid.validatorAddress]; - Status memory opportunityStatus = statusMap[bid.opportunityAddress]; - - // Verify that the opportunity and the validator are both participating addresses - if (validatorStatus.kind != statusType.VALIDATOR) revert PermissionMustBeValidator(); - if (opportunityStatus.kind != statusType.OPPORTUNITY) revert PermissionInvalidOpportunityAddress(); - - // We want auction_number be in the [activeAtAuctionRound - inactiveAtAuctionRound] window. - // Verify not flagged as inactive - if (validatorStatus.inactiveAtAuctionRound <= auction_number) revert InequalityValidatorDisabledAtTime(); - if (opportunityStatus.inactiveAtAuctionRound <= auction_number) revert InequalityOpportunityDisabledAtTime(); - - // Verify still flagged active - if (validatorStatus.activeAtAuctionRound > auction_number) revert InequalityValidatorNotEnabledYet(); - if (opportunityStatus.activeAtAuctionRound > auction_number) revert InequalityOpportunityNotEnabledYet(); - - - // Figure out if we have an existing bid - Bid memory current_top_bid = auctionsMap[auction_number][ - bid.validatorAddress - ][bid.opportunityAddress]; - - ValidatorBalanceCheckpoint storage valCheckpoint = validatorsCheckpoints[bid.validatorAddress]; - - if ((valCheckpoint.lastBidReceivedAuction != auction_number) && (valCheckpoint.pendingBalanceAtlastBid > 0)) { - // Need to move pending to outstanding - valCheckpoint.outstandingBalance += valCheckpoint.pendingBalanceAtlastBid; - valCheckpoint.pendingBalanceAtlastBid = 0; - } - - // Update bid for pair - auctionsMap[auction_number][bid.validatorAddress][ - bid.opportunityAddress - ] = bid; - - if (current_top_bid.bidAmount > 0) { - // Existing bid for this auction number && pair combo - // Handle checkpoint cuts replacement - (uint256 vCutPrevious, uint256 flCutPrevious) = _calculateCuts(current_top_bid.bidAmount); - (uint256 vCut, uint256 flCut) = _calculateCuts(bid.bidAmount); - - outstandingFLBalance = outstandingFLBalance + flCut - flCutPrevious; - valCheckpoint.pendingBalanceAtlastBid = valCheckpoint.pendingBalanceAtlastBid + vCut - vCutPrevious; - - - // Update the existing Bid mapping - _receiveBid( - bid, - current_top_bid.bidAmount, - current_top_bid.searcherPayableAddress - ); - _refundPreviousBidder(current_top_bid); - - - } else { - // First bid on pair for this auction number - // Update checkpoint if needed as another pair could have bid already for this auction number - - if (valCheckpoint.lastBidReceivedAuction != auction_number) { - valCheckpoint.lastBidReceivedAuction = auction_number; - } - - (uint256 vCutFirst, uint256 flCutFirst) = _calculateCuts(bid.bidAmount); - - // Handle cuts - outstandingFLBalance += flCutFirst; - valCheckpoint.pendingBalanceAtlastBid += vCutFirst; - - // Check balance - _receiveBid(bid, 0, address(0)); - - - } - - // Try adding to the validatorsactiveAtAuctionRound so the keeper can loop on it - // EnumerableSet already checks key pre-existence - validatorsactiveAtAuctionRound[auction_number].add(bid.validatorAddress); - - emit BidAdded( - bid.searcherContractAddress, - bid.validatorAddress, - bid.opportunityAddress, - bid.bidAmount, - auction_number - ); - } - - /// @notice Validators can always withdraw right after an amount is due - /// @dev It can be during an ongoing auction with pendingBalanceAtlastBid being the current auction - /// @dev Or lastBidReceivedAuction being a previous auction, in which case outstanding+pending can be withdrawn - /// @dev _Anyone_ can initiate a validator to be paid what it's owed - /// @param _outstandingValidatorWithBalance Redeems outstanding balance for a validator - function redeemOutstandingBalance(address _outstandingValidatorWithBalance) - external - whenNotPaused - nonReentrant - { - _redeemOutstanding(_outstandingValidatorWithBalance); - } - - /***********************************| - | Public Resolvers | - |__________________________________*/ - - /// @notice Gelato Offchain Resolver - /// @dev Automated function checked each block offchain by Gelato Network if there is outstanding payments to process - /// @return canExec Should the worker trigger - /// @return execPayload The payload if canExec is true - function checker() - external - view - returns (bool canExec, bytes memory execPayload) - { - if (_offchain_checker_disabled || paused || tx.gasprice > max_gas_price) return (false, ""); - // Go workers go - canExec = false; - ( - bool hasJobs, - address[] memory autopayRecipients - ) = getAutopayJobs(autopay_batch_size, auction_number - 1); - if (hasJobs) { - canExec = true; - execPayload = abi.encodeWithSelector( - this.processAutopayJobs.selector, - autopayRecipients - ); - return (canExec, execPayload); - } - return (false, ""); - } - - /// @notice Processes a list of addresses to transfer their outstanding balance - /// @dev Genrally called by Ops with array length of autopay_batch_size - /// @param autopayRecipients Array of recipents to consider for autopay - function processAutopayJobs(address[] calldata autopayRecipients) external nonReentrant onlyOwnerStarterOps { - // Reassert checks if insane spike between gelato trigger and tx picked up - if (_offchain_checker_disabled || paused) revert PermissionPaused(); - if (tx.gasprice > max_gas_price) revert TimeGasNotSuitable(); - - uint length = autopayRecipients.length; - for (uint i = 0;i < length;) { - if (autopayRecipients[i] != address(0)) { - _redeemOutstanding(autopayRecipients[i]); - } - unchecked { ++i; } - } - } - - /***********************************| - | Views | - |__________________________________*/ - - /// @notice Returns if there is autopays to be done for given `_auction_index` - /// @dev Most likely called off chain by Gelato - /// @param _batch_size Max recipients to return - /// @param _auction_index Auction round - /// @return hasJobs If there was jobs found to be done by ops - /// @return autopayRecipients List of addresses eligible to be paid - function getAutopayJobs(uint16 _batch_size, uint128 _auction_index) public view returns (bool hasJobs, address[] memory autopayRecipients) { - autopayRecipients = new address[](_batch_size); // Filled with 0x0 - // An active validator means a bid happened so potentially balances were moved to outstanding while the bid happened - EnumerableSet.AddressSet storage prevRoundAddrSet = validatorsactiveAtAuctionRound[_auction_index]; - uint16 assigned = 0; - uint256 len = prevRoundAddrSet.length(); - for (uint256 i = 0; i < len; i++) { - address current_validator = prevRoundAddrSet.at(i); - ValidatorBalanceCheckpoint memory valCheckpoint = validatorsCheckpoints[current_validator]; - uint256 minAmountForValidator = minAutoShipThreshold >= validatorsPreferences[current_validator].minAutoshipAmount ? minAutoShipThreshold : validatorsPreferences[current_validator].minAutoshipAmount; - if (_checkRedeemableOutstanding(valCheckpoint, minAmountForValidator)) { - autopayRecipients[assigned] = current_validator; - ++assigned; - } - if (assigned >= _batch_size) { - break; - } - } - hasJobs = assigned > 0; - } - - /// @notice Gets the status of an address - /// @dev Contains (activeAtAuctionRound, inactiveAtAuctionRound, statusType) - /// @param _who Address we want the status of - /// @return Status Status of the given address - function getStatus(address _who) external view returns (Status memory) { - return statusMap[_who]; - } - - /// @notice Gets the validators involved with a given auction - /// @dev validatorsactiveAtAuctionRound being an EnumerableSet - /// @param _auction_index Auction Round - /// @return Array of validator addresses that received a bid during round `_auction_index` - function getValidatorsactiveAtAuctionRound(uint128 _auction_index) external view returns (address[] memory) { - return validatorsactiveAtAuctionRound[_auction_index].values(); - } - - - /// @notice Gets the auction number for which the fast lane privileges are active - /// @return auction round - function getActivePrivilegesAuctionNumber() public view returns (uint128) { - return auction_number - 1; - } - - /// @notice Gets the checkpoint of an address - /// @param _who Address we want the checkpoint of - /// @return Validator checkpoint - function getCheckpoint(address _who) external view returns (ValidatorBalanceCheckpoint memory) { - return validatorsCheckpoints[_who]; - } - - /// @notice Gets the preferences of an address - /// @param _who Address we want the preferences of - /// @return Validator preferences - function getPreferences(address _who) external view returns (ValidatorPreferences memory) { - return validatorsPreferences[_who]; - } - - /// @notice Determines the current top bid of a pair for the current ongoing (live) auction - /// @param _validatorAddress Validator for the given pair - /// @param _opportunityAddress Opportunity for the given pair - /// @return Tuple (bidAmount, auction_round) - function findLiveAuctionTopBid(address _validatorAddress, address _opportunityAddress) - external - view - atLiveStage - returns (uint256, uint128) - { - Bid memory topBid = auctionsMap[auction_number][ - _validatorAddress - ][_opportunityAddress]; - return (topBid.bidAmount, auction_number); - } - - /// @notice Returns the top bid of a past auction round for a given pair - /// @param _auction_index Auction round - /// @param _validatorAddress Validator for the given pair - /// @param _opportunityAddress Opportunity for the given pair - /// @return Tuple (true|false, winningSearcher, auction_index) - function findFinalizedAuctionWinnerAtAuction( - uint128 _auction_index, - address _validatorAddress, - address _opportunityAddress - ) public view - returns ( - bool, - address, - uint128 - ) - { - if (_auction_index >= auction_number) revert InequalityInvalidIndex(); - // Get the winning searcher - address winningSearcher = auctionsMap[_auction_index][ - _validatorAddress - ][_opportunityAddress].searcherContractAddress; - - // Check if there is a winning searcher (no bids mean the winner is address(0)) - if (winningSearcher != address(0)) { - return (true, winningSearcher, _auction_index); - } else { - return (false, winningSearcher, _auction_index); - } - } - - /// @notice Returns the the winner of the last completed auction for a given pair - /// @param _validatorAddress Validator for the given pair - /// @param _opportunityAddress Opportunity for the given pair - /// @return Tuple (true|false, winningSearcher, auction_index) - function findLastFinalizedAuctionWinner( - address _validatorAddress, - address _opportunityAddress - ) - external - view - returns ( - bool, - address, - uint128 - ) - { - return findFinalizedAuctionWinnerAtAuction(getActivePrivilegesAuctionNumber(), _validatorAddress, _opportunityAddress); - } - - /***********************************| - | Modifiers | - |__________________________________*/ - - modifier notLiveStage() { - if (auction_live) revert TimeNotWhenAuctionIsLive(); - _; - } - - modifier atLiveStage() { - if (!auction_live) revert TimeNotWhenAuctionIsStopped(); - _; - } - - modifier whenNotPaused() { - if (paused) revert PermissionPaused(); - _; - } - - modifier onlyValidator() { - if(statusMap[msg.sender].kind != statusType.VALIDATOR) revert PermissionMustBeValidator(); - _; - } - - modifier onlyOwnerStarterOps() { - if (msg.sender != ops && msg.sender != auctionStarter && msg.sender != owner()) revert PermissionOnlyOps(); - _; - } - - modifier onlyStarterOrOwner() { - if (msg.sender != auctionStarter && msg.sender != owner()) revert PermissionNotOwnerNorStarter(); - _; - } -} diff --git a/contracts/legacy/legacy-abi/FastLaneLegacyAuctionAbi.legacy.json b/contracts/legacy/legacy-abi/FastLaneLegacyAuctionAbi.legacy.json deleted file mode 100644 index c698f0d..0000000 --- a/contracts/legacy/legacy-abi/FastLaneLegacyAuctionAbi.legacy.json +++ /dev/null @@ -1,1357 +0,0 @@ -[ - { - "inputs": [], - "name": "GeneralFailure", - "type": "error" - }, - { - "inputs": [], - "name": "InequalityAddressMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "InequalityAlreadyTopBidder", - "type": "error" - }, - { - "inputs": [], - "name": "InequalityInvalidIndex", - "type": "error" - }, - { - "inputs": [], - "name": "InequalityNotEnoughFunds", - "type": "error" - }, - { - "inputs": [], - "name": "InequalityNothingToRedeem", - "type": "error" - }, - { - "inputs": [], - "name": "InequalityOpportunityDisabledAtTime", - "type": "error" - }, - { - "inputs": [], - "name": "InequalityOpportunityNotEnabledYet", - "type": "error" - }, - { - "inputs": [], - "name": "InequalityTooHigh", - "type": "error" - }, - { - "inputs": [], - "name": "InequalityTooLow", - "type": "error" - }, - { - "inputs": [], - "name": "InequalityValidatorDisabledAtTime", - "type": "error" - }, - { - "inputs": [], - "name": "InequalityValidatorNotEnabledYet", - "type": "error" - }, - { - "inputs": [], - "name": "InequalityWrongBatchSize", - "type": "error" - }, - { - "inputs": [], - "name": "InequalityWrongToken", - "type": "error" - }, - { - "inputs": [], - "name": "PermissionInvalidOpportunityAddress", - "type": "error" - }, - { - "inputs": [], - "name": "PermissionMustBeValidator", - "type": "error" - }, - { - "inputs": [], - "name": "PermissionNotOwner", - "type": "error" - }, - { - "inputs": [], - "name": "PermissionNotOwnerNorStarter", - "type": "error" - }, - { - "inputs": [], - "name": "PermissionOnlyFromPayorEoa", - "type": "error" - }, - { - "inputs": [], - "name": "PermissionOnlyOps", - "type": "error" - }, - { - "inputs": [], - "name": "PermissionPaused", - "type": "error" - }, - { - "inputs": [], - "name": "TimeAlreadyInit", - "type": "error" - }, - { - "inputs": [], - "name": "TimeGasNotSuitable", - "type": "error" - }, - { - "inputs": [], - "name": "TimeNotWhenAuctionIsLive", - "type": "error" - }, - { - "inputs": [], - "name": "TimeNotWhenAuctionIsStopped", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint128", - "name": "auction_number", - "type": "uint128" - } - ], - "name": "AuctionEnded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint128", - "name": "auction_number", - "type": "uint128" - } - ], - "name": "AuctionStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "starter", - "type": "address" - } - ], - "name": "AuctionStarterSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint16", - "name": "batch_size", - "type": "uint16" - } - ], - "name": "AutopayBatchSizeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "bidder", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "opportunity", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "auction_number", - "type": "uint256" - } - ], - "name": "BidAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "BidTokenSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FastLaneFeeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint128", - "name": "amount", - "type": "uint128" - } - ], - "name": "MinimumAutoshipThresholdSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "MinimumBidIncrementSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "opportunity", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint128", - "name": "auction_number", - "type": "uint128" - } - ], - "name": "OpportunityAddressDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "opportunity", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint128", - "name": "auction_number", - "type": "uint128" - } - ], - "name": "OpportunityAddressEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "ops", - "type": "address" - } - ], - "name": "OpsSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "state", - "type": "bool" - } - ], - "name": "PausedStateSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint128", - "name": "amount", - "type": "uint128" - } - ], - "name": "ResolverMaxGasPriceSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint128", - "name": "auction_number", - "type": "uint128" - } - ], - "name": "ValidatorAddressDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint128", - "name": "auction_number", - "type": "uint128" - } - ], - "name": "ValidatorAddressEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "minAutoshipAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "validatorPayableAddress", - "type": "address" - } - ], - "name": "ValidatorPreferencesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint128", - "name": "auction_number", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "destination", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "ValidatorWithdrawnBalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "WithdrawStuckERC20", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "WithdrawStuckNativeToken", - "type": "event" - }, - { - "inputs": [], - "name": "MAX_AUCTION_VALUE", - "outputs": [ - { - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "auctionInitialized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "auctionStarter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "auction_live", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "auction_number", - "outputs": [ - { - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "autopay_batch_size", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "bid_increment", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "bid_token", - "outputs": [ - { - "internalType": "contract ERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "checker", - "outputs": [ - { - "internalType": "bool", - "name": "canExec", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "execPayload", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_opportunityAddress", - "type": "address" - } - ], - "name": "disableOpportunityAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_validatorAddress", - "type": "address" - } - ], - "name": "disableValidatorAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_opportunityAddress", - "type": "address" - } - ], - "name": "enableOpportunityAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_validatorAddress", - "type": "address" - } - ], - "name": "enableValidatorAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_validatorAddress", - "type": "address" - }, - { - "internalType": "uint128", - "name": "_minAutoshipAmount", - "type": "uint128" - }, - { - "internalType": "address", - "name": "_validatorPayableAddress", - "type": "address" - } - ], - "name": "enableValidatorAddressWithPreferences", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "endAuction", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "fast_lane_fee", - "outputs": [ - { - "internalType": "uint24", - "name": "", - "type": "uint24" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint128", - "name": "auction_index", - "type": "uint128" - }, - { - "internalType": "address", - "name": "validatorAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "opportunityAddress", - "type": "address" - } - ], - "name": "findFinalizedAuctionWinnerAtAuction", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "validatorAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "opportunityAddress", - "type": "address" - } - ], - "name": "findLastFinalizedAuctionWinner", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "validatorAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "opportunityAddress", - "type": "address" - } - ], - "name": "findLiveAuctionTopBid", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getActivePrivilegesAuctionNumber", - "outputs": [ - { - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "batch_size", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "auction_index", - "type": "uint128" - } - ], - "name": "getAutopayJobs", - "outputs": [ - { - "internalType": "bool", - "name": "hasJobs", - "type": "bool" - }, - { - "internalType": "address[]", - "name": "autopayRecipients", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "who", - "type": "address" - } - ], - "name": "getCheckpoint", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "pendingBalanceAtlastBid", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "outstandingBalance", - "type": "uint256" - }, - { - "internalType": "uint128", - "name": "lastWithdrawnAuction", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "lastBidReceivedAuction", - "type": "uint128" - } - ], - "internalType": "struct ValidatorBalanceCheckpoint", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "who", - "type": "address" - } - ], - "name": "getPreferences", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "minAutoshipAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "validatorPayableAddress", - "type": "address" - } - ], - "internalType": "struct ValidatorPreferences", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "who", - "type": "address" - } - ], - "name": "getStatus", - "outputs": [ - { - "components": [ - { - "internalType": "uint128", - "name": "activeAtAuctionRound", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "inactiveAtAuctionRound", - "type": "uint128" - }, - { - "internalType": "enum statusType", - "name": "kind", - "type": "uint8" - } - ], - "internalType": "struct Status", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint128", - "name": "auction_index", - "type": "uint128" - } - ], - "name": "getValidatorsactiveAtAuctionRound", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_initial_bid_token", - "type": "address" - }, - { - "internalType": "address", - "name": "_ops", - "type": "address" - }, - { - "internalType": "address", - "name": "_starter", - "type": "address" - } - ], - "name": "initialSetupAuction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "max_gas_price", - "outputs": [ - { - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minAutoShipThreshold", - "outputs": [ - { - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ops", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "outstandingFLBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "autopayRecipients", - "type": "address[]" - } - ], - "name": "processAutopayJobs", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_outstandingValidatorWithBalance", - "type": "address" - } - ], - "name": "redeemOutstandingBalance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "_size", - "type": "uint16" - } - ], - "name": "setAutopayBatchSize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_bid_token_address", - "type": "address" - } - ], - "name": "setBidToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint24", - "name": "_fastLaneFee", - "type": "uint24" - } - ], - "name": "setFastlaneFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint128", - "name": "_minAmount", - "type": "uint128" - } - ], - "name": "setMinimumAutoShipThreshold", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_bid_increment", - "type": "uint256" - } - ], - "name": "setMinimumBidIncrement", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_state", - "type": "bool" - } - ], - "name": "setOffchainCheckerDisabledState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_ops", - "type": "address" - } - ], - "name": "setOps", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_state", - "type": "bool" - } - ], - "name": "setPausedState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint128", - "name": "_maxgas", - "type": "uint128" - } - ], - "name": "setResolverMaxGasPrice", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_starter", - "type": "address" - } - ], - "name": "setStarter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint128", - "name": "_minAutoshipAmount", - "type": "uint128" - }, - { - "internalType": "address", - "name": "_validatorPayableAddress", - "type": "address" - } - ], - "name": "setValidatorPreferences", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "startAuction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "validatorAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "opportunityAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "searcherContractAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "searcherPayableAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bidAmount", - "type": "uint256" - } - ], - "internalType": "struct Bid", - "name": "bid", - "type": "tuple" - } - ], - "name": "submitBid", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_tokenAddress", - "type": "address" - } - ], - "name": "withdrawStuckERC20", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "withdrawStuckNativeToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/lcov.info b/lcov.info deleted file mode 100644 index 2c08e46..0000000 --- a/lcov.info +++ /dev/null @@ -1,1057 +0,0 @@ -TN: -SF:contracts/FastLaneFactory.sol -FN:19,FastLaneFactory._createFastLane -FNDA:0,FastLaneFactory._createFastLane -DA:22,0 -DA:26,0 -BRDA:26,0,0,- -BRDA:26,0,1,- -DA:27,0 -DA:29,0 -FN:33,FastLaneFactory.getArgs -FNDA:0,FastLaneFactory.getArgs -DA:34,0 -DA:35,0 -FN:57,FastLaneFactory.getFastLaneContractBySalt -FNDA:0,FastLaneFactory.getFastLaneContractBySalt -DA:59,0 -DA:61,0 -BRDA:61,1,0,- -BRDA:61,1,1,- -DA:62,0 -BRDA:62,2,0,- -BRDA:62,2,1,- -DA:64,0 -DA:72,0 -FNF:3 -FNH:0 -LF:11 -LH:0 -BRF:6 -BRH:0 -end_of_record -TN: -SF:contracts/auction-handler/FastLaneAuctionHandler.sol -FN:123,FastLaneAuctionHandler.submitFlashBid -FNDA:17,FastLaneAuctionHandler.submitFlashBid -DA:130,15 -BRDA:130,0,0,1 -BRDA:130,0,1,14 -DA:133,14 -DA:138,14 -DA:144,8 -BRDA:144,1,0,2 -BRDA:144,1,1,6 -DA:157,6 -DA:159,4 -FN:169,FastLaneAuctionHandler.submitFlashBidWithRefund -FNDA:8,FastLaneAuctionHandler.submitFlashBidWithRefund -DA:177,6 -BRDA:177,2,0,1 -BRDA:177,2,1,5 -DA:178,5 -BRDA:178,3,0,- -BRDA:178,3,1,5 -DA:183,5 -DA:186,5 -DA:191,2 -BRDA:191,4,0,- -BRDA:191,4,1,2 -DA:204,2 -FN:212,FastLaneAuctionHandler.submitFastBid -FNDA:1,FastLaneAuctionHandler.submitFastBid -DA:218,0 -BRDA:218,5,0,- -BRDA:218,5,1,- -DA:222,0 -FN:233,FastLaneAuctionHandler.payValidatorCustom -FNDA:2,FastLaneAuctionHandler.payValidatorCustom -DA:234,2 -BRDA:234,6,0,1 -BRDA:234,6,1,1 -DA:237,1 -DA:239,1 -DA:247,1 -FN:257,FastLaneAuctionHandler.fastBidWrapper -FNDA:1,FastLaneAuctionHandler.fastBidWrapper -DA:265,1 -BRDA:265,7,0,1 -BRDA:265,7,1,- -DA:268,0 -DA:269,0 -DA:274,0 -DA:280,0 -BRDA:280,8,0,- -BRDA:280,8,1,- -DA:293,0 -DA:296,0 -DA:298,0 -FN:301,FastLaneAuctionHandler.payValidatorFee -FNDA:19,FastLaneAuctionHandler.payValidatorFee -DA:302,19 -BRDA:302,9,0,1 -BRDA:302,9,1,18 -DA:303,18 -DA:304,18 -DA:305,18 -FN:318,FastLaneAuctionHandler.simulateFlashBid -FNDA:2,FastLaneAuctionHandler.simulateFlashBid -DA:326,2 -BRDA:326,10,0,1 -BRDA:326,10,1,1 -DA:329,1 -DA:333,1 -DA:339,1 -BRDA:339,11,0,- -BRDA:339,11,1,1 -DA:351,1 -BRDA:351,12,0,- -BRDA:351,12,1,1 -DA:352,0 -DA:354,1 -FN:361,FastLaneAuctionHandler._handleBalances -FNDA:6,FastLaneAuctionHandler._handleBalances -DA:362,6 -BRDA:362,13,0,2 -BRDA:362,13,1,4 -DA:363,2 -DA:366,4 -BRDA:366,14,0,1 -BRDA:366,14,1,4 -DA:367,1 -DA:370,4 -DA:371,4 -DA:373,4 -FN:376,FastLaneAuctionHandler._handleBalancesFast -FNDA:0,FastLaneAuctionHandler._handleBalancesFast -DA:378,0 -BRDA:378,15,0,- -BRDA:378,15,1,- -DA:379,0 -DA:383,0 -DA:384,0 -BRDA:384,16,0,- -BRDA:384,16,1,- -DA:387,0 -BRDA:387,17,0,- -BRDA:387,17,1,- -DA:390,0 -BRDA:390,18,0,- -BRDA:390,18,1,- -DA:391,0 -DA:398,0 -DA:406,0 -DA:410,0 -DA:411,0 -DA:413,0 -FN:417,FastLaneAuctionHandler._handleBalancesWithRefundAndEmit -FNDA:2,FastLaneAuctionHandler._handleBalancesWithRefundAndEmit -DA:424,2 -DA:426,2 -BRDA:426,19,0,- -BRDA:426,19,1,2 -DA:427,0 -DA:430,2 -BRDA:430,20,0,1 -BRDA:430,20,1,2 -DA:431,1 -DA:435,2 -DA:436,2 -DA:439,2 -DA:440,2 -DA:441,2 -DA:443,2 -FN:448,FastLaneAuctionHandler. -FNDA:0,FastLaneAuctionHandler. -FN:457,FastLaneAuctionHandler.syncStuckNativeToken -FNDA:3,FastLaneAuctionHandler.syncStuckNativeToken -DA:462,2 -DA:463,2 -DA:464,2 -BRDA:464,21,0,2 -BRDA:464,21,1,2 -DA:466,2 -DA:468,2 -DA:470,2 -DA:471,2 -DA:473,2 -FN:480,FastLaneAuctionHandler.withdrawStuckERC20 -FNDA:3,FastLaneAuctionHandler.withdrawStuckERC20 -DA:485,2 -DA:486,2 -DA:488,2 -BRDA:488,22,0,1 -BRDA:488,22,1,2 -DA:489,1 -DA:490,1 -FN:500,FastLaneAuctionHandler.collectFees -FNDA:9,FastLaneAuctionHandler.collectFees -DA:502,5 -DA:504,5 -DA:505,5 -BRDA:505,23,0,1 -BRDA:505,23,1,4 -DA:507,4 -DA:508,4 -DA:509,4 -DA:510,4 -DA:514,4 -DA:515,4 -FN:520,FastLaneAuctionHandler.updateValidatorPayee -FNDA:27,FastLaneAuctionHandler.updateValidatorPayee -DA:522,23 -BRDA:522,24,0,1 -BRDA:522,24,1,22 -DA:523,22 -BRDA:523,25,0,1 -BRDA:523,25,1,21 -DA:525,21 -DA:527,21 -DA:531,21 -BRDA:531,26,0,3 -BRDA:531,26,1,18 -DA:533,18 -BRDA:533,27,0,7 -BRDA:533,27,1,18 -DA:534,7 -DA:537,18 -DA:538,18 -DA:539,18 -DA:541,18 -FN:546,FastLaneAuctionHandler.clearValidatorPayee -FNDA:4,FastLaneAuctionHandler.clearValidatorPayee -DA:547,4 -BRDA:547,28,0,1 -BRDA:547,28,1,3 -DA:548,3 -DA:550,3 -DA:551,3 -DA:552,3 -DA:553,3 -DA:555,3 -FN:560,FastLaneAuctionHandler.updateValidatorRefundShare -FNDA:2,FastLaneAuctionHandler.updateValidatorRefundShare -DA:561,2 -DA:564,2 -BRDA:564,29,0,1 -BRDA:564,29,1,1 -DA:566,1 -FN:573,FastLaneAuctionHandler.isPayeeTimeLocked -FNDA:3,FastLaneAuctionHandler.isPayeeTimeLocked -DA:574,33 -FN:577,FastLaneAuctionHandler.isValidPayee -FNDA:2,FastLaneAuctionHandler.isValidPayee -DA:578,2 -FN:581,FastLaneAuctionHandler.validatorPayee -FNDA:16,FastLaneAuctionHandler.validatorPayee -DA:582,16 -DA:583,16 -FN:587,FastLaneAuctionHandler.getValidatorBalance -FNDA:5,FastLaneAuctionHandler.getValidatorBalance -DA:588,5 -FN:592,FastLaneAuctionHandler.getValidatorPayee -FNDA:8,FastLaneAuctionHandler.getValidatorPayee -DA:593,8 -FN:597,FastLaneAuctionHandler.getValidatorBlockOfLastWithdraw -FNDA:2,FastLaneAuctionHandler.getValidatorBlockOfLastWithdraw -DA:598,2 -FN:604,FastLaneAuctionHandler.getValidatorRecipient -FNDA:12,FastLaneAuctionHandler.getValidatorRecipient -DA:605,12 -FN:609,FastLaneAuctionHandler.getValidator -FNDA:31,FastLaneAuctionHandler.getValidator -DA:610,31 -BRDA:610,30,0,23 -BRDA:610,30,1,8 -DA:611,23 -DA:613,8 -BRDA:613,31,0,8 -BRDA:613,31,1,- -DA:614,8 -DA:617,0 -FN:680,FastLaneAuctionHandler._validateValidator -FNDA:0,FastLaneAuctionHandler._validateValidator -DA:685,0 -DA:686,0 -DA:687,0 -DA:688,0 -BRDA:688,32,0,- -BRDA:688,32,1,- -DA:689,0 -DA:691,0 -DA:693,0 -FNF:26 -FNH:23 -LF:130 -LH:99 -BRF:66 -BRH:45 -end_of_record -TN: -SF:contracts/helpers/SearcherHelperRepayerEcho.sol -FN:8,SearcherHelperRepayerEcho.fastLaneCall -FNDA:0,SearcherHelperRepayerEcho.fastLaneCall -DA:13,0 -DA:14,0 -DA:17,0 -DA:20,0 -BRDA:20,0,0,- -BRDA:20,0,1,- -DA:21,0 -FNF:1 -FNH:0 -LF:5 -LH:0 -BRF:2 -BRH:0 -end_of_record -TN: -SF:contracts/legacy/FastLaneLegacyAuction.sol -FN:176,FastLaneLegacyAuction.initialize -FNDA:1,FastLaneLegacyAuction.initialize -DA:177,1 -DA:178,1 -DA:179,1 -FN:182,FastLaneLegacyAuction._authorizeUpgrade -FNDA:1,FastLaneLegacyAuction._authorizeUpgrade -FN:190,FastLaneLegacyAuction.initialSetupAuction -FNDA:2,FastLaneLegacyAuction.initialSetupAuction -DA:191,2 -BRDA:191,0,0,1 -BRDA:191,0,1,1 -DA:192,1 -DA:193,1 -DA:194,1 -DA:195,1 -DA:196,1 -DA:197,1 -DA:198,1 -DA:199,1 -DA:200,1 -DA:201,1 -FN:269,FastLaneLegacyAuction._updateValidatorPreferences -FNDA:11,FastLaneLegacyAuction._updateValidatorPreferences -DA:270,11 -BRDA:270,1,0,1 -BRDA:270,1,1,10 -DA:271,10 -BRDA:271,2,0,1 -BRDA:271,2,1,9 -DA:273,9 -DA:274,9 -FN:285,FastLaneLegacyAuction.setValidatorPreferences -FNDA:5,FastLaneLegacyAuction.setValidatorPreferences -DA:286,4 -FN:296,FastLaneLegacyAuction.setPausedState -FNDA:1,FastLaneLegacyAuction.setPausedState -DA:297,1 -DA:298,1 -FN:304,FastLaneLegacyAuction.setMinimumBidIncrement -FNDA:2,FastLaneLegacyAuction.setMinimumBidIncrement -DA:305,3 -DA:306,3 -FN:312,FastLaneLegacyAuction.setOps -FNDA:2,FastLaneLegacyAuction.setOps -DA:313,3 -DA:314,3 -FN:320,FastLaneLegacyAuction.setMinimumAutoShipThreshold -FNDA:4,FastLaneLegacyAuction.setMinimumAutoShipThreshold -DA:321,5 -DA:322,5 -FN:328,FastLaneLegacyAuction.setResolverMaxGasPrice -FNDA:2,FastLaneLegacyAuction.setResolverMaxGasPrice -DA:329,3 -DA:330,3 -FN:336,FastLaneLegacyAuction.setFastlaneFee -FNDA:6,FastLaneLegacyAuction.setFastlaneFee -DA:341,7 -BRDA:341,3,0,1 -BRDA:341,3,1,6 -DA:342,6 -DA:343,6 -FN:349,FastLaneLegacyAuction.setBidToken -FNDA:1,FastLaneLegacyAuction.setBidToken -DA:355,2 -BRDA:355,4,0,1 -BRDA:355,4,1,1 -DA:356,1 -DA:357,1 -FN:364,FastLaneLegacyAuction.setStarter -FNDA:1,FastLaneLegacyAuction.setStarter -DA:365,2 -DA:366,2 -FN:374,FastLaneLegacyAuction.enableOpportunityAddress -FNDA:17,FastLaneLegacyAuction.enableOpportunityAddress -DA:379,17 -DA:380,17 -DA:381,17 -FN:387,FastLaneLegacyAuction.disableOpportunityAddress -FNDA:4,FastLaneLegacyAuction.disableOpportunityAddress -DA:391,4 -DA:392,4 -BRDA:392,5,0,1 -BRDA:392,5,1,3 -DA:393,3 -DA:395,3 -DA:396,3 -FN:402,FastLaneLegacyAuction._enableValidatorCheckpoint -FNDA:21,FastLaneLegacyAuction._enableValidatorCheckpoint -DA:403,21 -DA:404,21 -DA:407,21 -DA:408,21 -BRDA:408,6,0,20 -BRDA:408,6,1,21 -DA:409,20 -DA:411,21 -FN:417,FastLaneLegacyAuction.enableValidatorAddress -FNDA:14,FastLaneLegacyAuction.enableValidatorAddress -DA:421,14 -FN:429,FastLaneLegacyAuction.enableValidatorAddressWithPreferences -FNDA:7,FastLaneLegacyAuction.enableValidatorAddressWithPreferences -DA:433,7 -DA:434,7 -FN:440,FastLaneLegacyAuction.disableValidatorAddress -FNDA:2,FastLaneLegacyAuction.disableValidatorAddress -DA:444,2 -DA:445,2 -BRDA:445,7,0,1 -BRDA:445,7,1,1 -DA:446,1 -DA:448,1 -DA:449,1 -FN:454,FastLaneLegacyAuction.startAuction -FNDA:29,FastLaneLegacyAuction.startAuction -DA:455,28 -DA:456,28 -FN:462,FastLaneLegacyAuction.endAuction -FNDA:21,FastLaneLegacyAuction.endAuction -DA:470,21 -DA:472,21 -DA:475,21 -DA:477,21 -DA:478,21 -DA:481,21 -DA:483,21 -FN:489,FastLaneLegacyAuction.setAutopayBatchSize -FNDA:3,FastLaneLegacyAuction.setAutopayBatchSize -DA:490,4 -DA:491,4 -FN:497,FastLaneLegacyAuction.setOffchainCheckerDisabledState -FNDA:2,FastLaneLegacyAuction.setOffchainCheckerDisabledState -DA:498,2 -FN:504,FastLaneLegacyAuction.withdrawStuckNativeToken -FNDA:1,FastLaneLegacyAuction.withdrawStuckNativeToken -DA:509,1 -BRDA:509,8,0,1 -BRDA:509,8,1,1 -DA:510,1 -DA:511,1 -FN:518,FastLaneLegacyAuction.withdrawStuckERC20 -FNDA:2,FastLaneLegacyAuction.withdrawStuckERC20 -DA:523,2 -BRDA:523,9,0,1 -BRDA:523,9,1,1 -DA:524,1 -DA:525,1 -DA:527,1 -BRDA:527,10,0,1 -BRDA:527,10,1,1 -DA:528,1 -DA:529,1 -FN:537,FastLaneLegacyAuction._receiveBid -FNDA:32,FastLaneLegacyAuction._receiveBid -DA:543,32 -BRDA:543,11,0,4 -BRDA:543,11,1,28 -DA:546,28 -BRDA:546,12,0,1 -BRDA:546,12,1,27 -DA:549,27 -BRDA:549,13,0,1 -BRDA:549,13,1,26 -DA:552,26 -FN:562,FastLaneLegacyAuction._refundPreviousBidder -FNDA:5,FastLaneLegacyAuction._refundPreviousBidder -DA:563,5 -FN:574,FastLaneLegacyAuction._calculateCuts -FNDA:41,FastLaneLegacyAuction._calculateCuts -DA:575,41 -DA:576,41 -FN:584,FastLaneLegacyAuction._checkRedeemableOutstanding -FNDA:47,FastLaneLegacyAuction._checkRedeemableOutstanding -DA:585,47 -FN:591,FastLaneLegacyAuction._redeemOutstanding -FNDA:16,FastLaneLegacyAuction._redeemOutstanding -DA:592,16 -BRDA:592,14,0,1 -BRDA:592,14,1,15 -DA:593,15 -DA:596,15 -BRDA:596,15,0,3 -BRDA:596,15,1,12 -DA:598,12 -DA:599,12 -BRDA:599,16,0,10 -BRDA:599,16,1,2 -DA:601,10 -DA:602,10 -DA:606,2 -DA:610,12 -DA:611,12 -DA:613,12 -DA:614,12 -DA:615,12 -BRDA:615,17,0,5 -BRDA:615,17,1,12 -DA:616,5 -DA:619,12 -DA:624,12 -FN:641,FastLaneLegacyAuction.submitBid -FNDA:41,FastLaneLegacyAuction.submitBid -DA:648,40 -BRDA:648,18,0,1 -BRDA:648,18,1,39 -DA:650,39 -DA:651,39 -DA:654,39 -BRDA:654,19,0,1 -BRDA:654,19,1,38 -DA:655,38 -BRDA:655,20,0,1 -BRDA:655,20,1,37 -DA:659,37 -BRDA:659,21,0,2 -BRDA:659,21,1,35 -DA:660,35 -BRDA:660,22,0,1 -BRDA:660,22,1,34 -DA:663,34 -BRDA:663,23,0,1 -BRDA:663,23,1,33 -DA:664,33 -BRDA:664,24,0,1 -BRDA:664,24,1,32 -DA:668,32 -DA:672,32 -DA:674,32 -BRDA:674,25,0,4 -BRDA:674,25,1,32 -DA:676,4 -DA:677,4 -DA:681,32 -DA:685,32 -BRDA:685,26,0,9 -BRDA:685,26,1,23 -DA:688,9 -DA:689,9 -DA:691,9 -DA:692,9 -DA:696,9 -DA:701,5 -DA:708,23 -BRDA:708,27,0,23 -BRDA:708,27,1,23 -DA:709,23 -DA:712,23 -DA:715,23 -DA:716,23 -DA:719,23 -DA:726,25 -DA:728,25 -FN:742,FastLaneLegacyAuction.redeemOutstandingBalance -FNDA:11,FastLaneLegacyAuction.redeemOutstandingBalance -DA:747,11 -FN:758,FastLaneLegacyAuction.checker -FNDA:17,FastLaneLegacyAuction.checker -DA:763,17 -BRDA:763,28,0,2 -BRDA:763,28,1,15 -DA:765,15 -DA:766,15 -DA:769,15 -DA:770,15 -BRDA:770,29,0,5 -BRDA:770,29,1,10 -DA:771,5 -DA:772,5 -DA:776,5 -DA:778,10 -FN:784,FastLaneLegacyAuction.processAutopayJobs -FNDA:5,FastLaneLegacyAuction.processAutopayJobs -DA:786,5 -BRDA:786,30,0,- -BRDA:786,30,1,5 -DA:787,5 -BRDA:787,31,0,1 -BRDA:787,31,1,4 -DA:789,4 -DA:790,4 -DA:791,8 -BRDA:791,32,0,- -BRDA:791,32,1,5 -DA:792,5 -DA:794,8 -FN:808,FastLaneLegacyAuction.getAutopayJobs -FNDA:7,FastLaneLegacyAuction.getAutopayJobs -DA:809,22 -DA:811,22 -DA:812,22 -DA:813,22 -DA:814,22 -DA:815,32 -DA:816,32 -DA:817,32 -DA:818,32 -BRDA:818,33,0,- -BRDA:818,33,1,11 -DA:819,11 -DA:820,11 -DA:822,32 -BRDA:822,34,0,2 -BRDA:822,34,1,30 -DA:823,2 -DA:826,22 -FN:833,FastLaneLegacyAuction.getStatus -FNDA:2,FastLaneLegacyAuction.getStatus -DA:834,2 -FN:841,FastLaneLegacyAuction.getValidatorsactiveAtAuctionRound -FNDA:3,FastLaneLegacyAuction.getValidatorsactiveAtAuctionRound -DA:842,3 -FN:848,FastLaneLegacyAuction.getActivePrivilegesAuctionNumber -FNDA:2,FastLaneLegacyAuction.getActivePrivilegesAuctionNumber -DA:849,3 -FN:855,FastLaneLegacyAuction.getCheckpoint -FNDA:13,FastLaneLegacyAuction.getCheckpoint -DA:856,13 -FN:862,FastLaneLegacyAuction.getPreferences -FNDA:1,FastLaneLegacyAuction.getPreferences -DA:863,1 -FN:870,FastLaneLegacyAuction.findLiveAuctionTopBid -FNDA:2,FastLaneLegacyAuction.findLiveAuctionTopBid -DA:876,2 -DA:879,2 -FN:887,FastLaneLegacyAuction.findFinalizedAuctionWinnerAtAuction -FNDA:2,FastLaneLegacyAuction.findFinalizedAuctionWinnerAtAuction -DA:898,3 -BRDA:898,35,0,- -BRDA:898,35,1,3 -DA:900,3 -DA:905,3 -BRDA:905,36,0,2 -BRDA:905,36,1,1 -DA:906,2 -DA:908,1 -FN:916,FastLaneLegacyAuction.findLastFinalizedAuctionWinner -FNDA:1,FastLaneLegacyAuction.findLastFinalizedAuctionWinner -DA:928,1 -FNF:43 -FNH:43 -LF:178 -LH:178 -BRF:74 -BRH:70 -end_of_record -TN: -SF:contracts/searcher-direct/FastLaneSearcherDirect.sol -FN:116,SearcherContractExample.doStuff -FNDA:6,SearcherContractExample.doStuff -DA:118,6 -BRDA:118,0,0,- -BRDA:118,0,1,- -DA:120,0 -BRDA:120,1,0,- -BRDA:120,1,1,- -DA:125,6 -DA:126,6 -DA:127,6 -DA:128,6 -FN:131,SearcherContractExample.doFail -FNDA:2,SearcherContractExample.doFail -DA:132,2 -BRDA:132,2,0,- -BRDA:132,2,1,- -DA:134,0 -BRDA:134,3,0,- -BRDA:134,3,1,- -DA:139,2 -BRDA:139,4,0,2 -BRDA:139,4,1,- -FN:27,FastLaneSearcherDirectContract.fastLaneCall -FNDA:10,FastLaneSearcherDirectContract.fastLaneCall -DA:34,8 -DA:37,8 -DA:40,8 -BRDA:40,0,0,2 -BRDA:40,0,1,6 -DA:41,2 -DA:45,6 -BRDA:45,1,0,4 -BRDA:45,1,1,2 -DA:50,2 -DA:54,2 -FN:60,FastLaneSearcherDirectContract.safeTransferETH -FNDA:2,FastLaneSearcherDirectContract.safeTransferETH -DA:61,2 -DA:65,2 -DA:68,2 -BRDA:68,2,0,- -BRDA:68,2,1,2 -FN:71,FastLaneSearcherDirectContract.setPFLAuctionAddress -FNDA:4,FastLaneSearcherDirectContract.setPFLAuctionAddress -DA:72,4 -BRDA:72,3,0,- -BRDA:72,3,1,4 -DA:73,4 -FN:76,FastLaneSearcherDirectContract.approveFastLaneEOA -FNDA:2,FastLaneSearcherDirectContract.approveFastLaneEOA -DA:77,2 -BRDA:77,4,0,- -BRDA:77,4,1,2 -DA:78,2 -FN:81,FastLaneSearcherDirectContract.revokeFastLaneEOA -FNDA:0,FastLaneSearcherDirectContract.revokeFastLaneEOA -DA:82,0 -BRDA:82,5,0,- -BRDA:82,5,1,- -DA:83,0 -FN:86,FastLaneSearcherDirectContract.checkFastLaneEOA -FNDA:8,FastLaneSearcherDirectContract.checkFastLaneEOA -DA:87,8 -BRDA:87,6,0,- -BRDA:87,6,1,8 -FN:90,FastLaneSearcherDirectContract.isTrustedForwarder -FNDA:0,FastLaneSearcherDirectContract.isTrustedForwarder -DA:91,10 -FN:98,FastLaneSearcherDirectContract. -FNDA:0,FastLaneSearcherDirectContract. -FNF:10 -FNH:7 -LF:27 -LH:23 -BRF:24 -BRH:9 -end_of_record -TN: -SF:contracts/searcher-proxy/FastLaneSearcherProxy.sol -FN:29,FastLaneSearcherProxyContract.fastLaneCall -FNDA:0,FastLaneSearcherProxyContract.fastLaneCall -DA:36,0 -DA:41,0 -DA:44,0 -BRDA:44,0,0,- -BRDA:44,0,1,- -DA:45,0 -DA:49,0 -BRDA:49,1,0,- -BRDA:49,1,1,- -DA:54,0 -DA:58,0 -FN:64,FastLaneSearcherProxyContract.safeTransferETH -FNDA:0,FastLaneSearcherProxyContract.safeTransferETH -DA:65,0 -DA:69,0 -DA:72,0 -BRDA:72,2,0,- -BRDA:72,2,1,- -FN:75,FastLaneSearcherProxyContract.setPFLAuctionAddress -FNDA:0,FastLaneSearcherProxyContract.setPFLAuctionAddress -DA:76,0 -BRDA:76,3,0,- -BRDA:76,3,1,- -DA:77,0 -FN:80,FastLaneSearcherProxyContract.setSearcherContractAddress -FNDA:0,FastLaneSearcherProxyContract.setSearcherContractAddress -DA:81,0 -BRDA:81,4,0,- -BRDA:81,4,1,- -DA:82,0 -FN:85,FastLaneSearcherProxyContract.approveFastLaneEOA -FNDA:0,FastLaneSearcherProxyContract.approveFastLaneEOA -DA:86,0 -BRDA:86,5,0,- -BRDA:86,5,1,- -DA:87,0 -FN:90,FastLaneSearcherProxyContract.revokeFastLaneEOA -FNDA:0,FastLaneSearcherProxyContract.revokeFastLaneEOA -DA:91,0 -BRDA:91,6,0,- -BRDA:91,6,1,- -DA:92,0 -FN:95,FastLaneSearcherProxyContract.checkFastLaneEOA -FNDA:0,FastLaneSearcherProxyContract.checkFastLaneEOA -DA:96,0 -BRDA:96,7,0,- -BRDA:96,7,1,- -FN:99,FastLaneSearcherProxyContract.isTrustedForwarder -FNDA:0,FastLaneSearcherProxyContract.isTrustedForwarder -DA:100,0 -FN:107,FastLaneSearcherProxyContract. -FNDA:0,FastLaneSearcherProxyContract. -FNF:9 -FNH:0 -LF:20 -LH:0 -BRF:16 -BRH:0 -end_of_record -TN: -SF:script/EOADeploy.s.sol -FN:18,Deploy.getArgs -FNDA:0,Deploy.getArgs -DA:19,0 -DA:20,0 -FN:23,Deploy.run -FNDA:0,Deploy.run -DA:25,0 -DA:26,0 -DA:27,0 -DA:28,0 -DA:30,0 -DA:31,0 -DA:32,0 -DA:33,0 -DA:36,0 -DA:39,0 -BRDA:39,0,0,- -BRDA:39,0,1,- -DA:40,0 -BRDA:40,1,0,- -BRDA:40,1,1,- -DA:46,0 -DA:47,0 -DA:49,0 -FNF:2 -FNH:0 -LF:16 -LH:0 -BRF:4 -BRH:0 -end_of_record -TN: -SF:script/legacy-script/EOADeploy.s.sol -FN:18,Deploy.getArgs -FNDA:0,Deploy.getArgs -DA:19,0 -DA:20,0 -FN:23,Deploy.run -FNDA:0,Deploy.run -DA:25,0 -DA:26,0 -DA:27,0 -DA:28,0 -DA:30,0 -DA:31,0 -DA:32,0 -DA:33,0 -DA:36,0 -DA:39,0 -BRDA:39,0,0,- -BRDA:39,0,1,- -DA:40,0 -BRDA:40,1,0,- -BRDA:40,1,1,- -DA:46,0 -DA:47,0 -DA:49,0 -DA:51,0 -FNF:2 -FNH:0 -LF:17 -LH:0 -BRF:4 -BRH:0 -end_of_record -TN: -SF:script/legacy-script/UUPSDeploy.s.sol -FN:19,Deploy.getArgs -FNDA:0,Deploy.getArgs -DA:20,0 -DA:21,0 -FN:24,Deploy.run -FNDA:0,Deploy.run -DA:26,0 -DA:27,0 -DA:28,0 -DA:29,0 -DA:31,0 -DA:32,0 -DA:33,0 -DA:34,0 -DA:37,0 -DA:40,0 -BRDA:40,0,0,- -BRDA:40,0,1,- -DA:41,0 -BRDA:41,1,0,- -BRDA:41,1,1,- -DA:43,0 -DA:45,0 -DA:46,0 -DA:48,0 -DA:50,0 -DA:53,0 -DA:55,0 -DA:58,0 -DA:59,0 -DA:61,0 -DA:62,0 -DA:63,0 -DA:64,0 -DA:66,0 -DA:67,0 -DA:68,0 -DA:72,0 -DA:74,0 -DA:75,0 -DA:79,0 -DA:80,0 -DA:83,0 -DA:84,0 -DA:85,0 -DA:87,0 -DA:89,0 -DA:92,0 -DA:93,0 -DA:94,0 -DA:95,0 -DA:97,0 -DA:98,0 -BRDA:98,2,0,- -BRDA:98,2,1,- -DA:103,0 -DA:104,0 -DA:106,0 -DA:107,0 -DA:108,0 -DA:109,0 -DA:110,0 -DA:111,0 -DA:113,0 -BRDA:113,3,0,- -BRDA:113,3,1,- -FNF:2 -FNH:0 -LF:54 -LH:0 -BRF:8 -BRH:0 -end_of_record -TN: -SF:test/PFL_AuctionHandler.t.sol -FN:848,BrokenSearcherRepayer.fastLaneCall -FNDA:1,BrokenSearcherRepayer.fastLaneCall -DA:853,1 -FN:859,BrokenSearcherRepayerPartial.fastLaneCall -FNDA:1,BrokenSearcherRepayerPartial.fastLaneCall -DA:864,1 -DA:865,1 -DA:866,1 -DA:869,1 -DA:872,1 -BRDA:872,0,0,- -BRDA:872,0,1,1 -DA:873,1 -FN:879,SearcherRepayerEcho.fastLaneCall -FNDA:3,SearcherRepayerEcho.fastLaneCall -DA:884,3 -DA:885,3 -DA:889,3 -DA:892,3 -BRDA:892,0,0,- -BRDA:892,0,1,3 -DA:893,3 -FN:826,BrokenUniswap.sickTrade -FNDA:0,BrokenUniswap.sickTrade -DA:827,0 -FN:837,BrokenSearcherForgotReturnBoolBytes.fastLaneCall -FNDA:1,BrokenSearcherForgotReturnBoolBytes.fastLaneCall -FN:919,SearcherRepayerOverpayerDouble.fastLaneCall -FNDA:2,SearcherRepayerOverpayerDouble.fastLaneCall -DA:924,2 -DA:925,2 -DA:926,2 -DA:929,2 -DA:932,2 -BRDA:932,0,0,- -BRDA:932,0,1,2 -DA:933,2 -FN:899,SearcherRepayerEvilEcho.fastLaneCall -FNDA:1,SearcherRepayerEvilEcho.fastLaneCall -DA:904,1 -DA:905,1 -DA:907,1 -DA:910,0 -DA:913,0 -BRDA:913,0,0,- -BRDA:913,0,1,- -DA:914,0 -FN:833,BrokenSearcherForgotFastLaneCallFn. -FNDA:0,BrokenSearcherForgotFastLaneCallFn. -FNF:8 -FNH:6 -LF:25 -LH:21 -BRF:8 -BRH:3 -end_of_record -TN: -SF:test/legacy-test/PFLAuction.t.sol -FN:86,PFLHelper._calculateCuts -FNDA:0,PFLHelper._calculateCuts -DA:87,0 -DA:88,0 -FN:91,PFLHelper.setUpMaticAndFastlane -FNDA:0,PFLHelper.setUpMaticAndFastlane -DA:94,0 -DA:96,0 -DA:98,0 -DA:100,0 -DA:102,0 -DA:104,0 -BRDA:104,0,0,- -BRDA:104,0,1,- -DA:105,0 -DA:107,0 -DA:108,0 -DA:109,0 -DA:112,0 -FN:115,PFLHelper.setUpBiddersSearchersWallets -FNDA:0,PFLHelper.setUpBiddersSearchersWallets -DA:116,0 -DA:118,0 -DA:119,0 -DA:120,0 -DA:121,0 -DA:122,0 -DA:123,0 -DA:124,0 -DA:126,0 -DA:127,0 -DA:129,0 -DA:130,0 -DA:131,0 -DA:132,0 -FNF:3 -FNH:0 -LF:27 -LH:0 -BRF:2 -BRH:0 -end_of_record -TN: -SF:test/mocks/MockPaymentProcessor.sol -FN:14,MockPaymentProcessor.payValidator -FNDA:1,MockPaymentProcessor.payValidator -DA:23,1 -DA:24,1 -DA:25,1 -DA:26,1 -DA:27,1 -FNF:1 -FNH:1 -LF:5 -LH:5 -BRF:0 -BRH:0 -end_of_record diff --git a/package.json b/package.json index b6f9e03..4fb5765 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "hardhat_gas": "REPORT_GAS=true hardhat test", "gas": "forge test -vv --gas-report", "ftest": "source .env && forge test -vvv --gas-report", - "ftest-ci": "forge test -vvvv --no-match-path '*legacy*'", + "ftest-ci": "forge test -vvvv", "ftest-fork": "source .env && forge test -vvv --fork-url ${ALCHEMY_APIKEY_MUMBAI} --fork-block-number 26702726 --gas-report", "ftrpc": "forge test -vv --ffi", "start": "hardhat node --port 8545", @@ -29,15 +29,10 @@ "anvil-mumbai": "anvil -f $ALCHEMY_APIKEY_MUMBAI", "anvil-polygon": "anvil -f $ALCHEMY_APIKEY_POLYGON", "anvil-polygon-old": "source .env && anvil -f $ALCHEMY_APIKEY_POLYGON --fork-block-number 32499027", - "mythril-local": "myth analyze contracts/legacy/FastLaneLegacyAuction.sol", - "mythril-docker": "docker run -it --rm -v$(pwd):/home/mythril mythril/myth -v4 analyze contracts/legacy/FastLaneLegacyAuction.sol --solc-json mythril.config.json --solv 0.8.15", "mappings": "forge remappings > remappings.txt", "deploy": "yarn clean-test && hardhat deploy", "deploy-only": "hardhat deploy --tags", "gen-docs": "solidity-docgen -i contracts -o docs", - "gen-legacy-inheritance": "slither contracts/legacy/FastLaneLegacyAuction.sol --print inheritance-graph", - "gen-legacy-interface": "cast interface -n IFastLaneAuction -o contracts/interfaces/IFastLaneAuction.sol ./out/FastLaneAuction.sol/FastLaneAuction.json", - "gen-legacy-abi": "jq '.abi' out/FastLaneAuction.sol/FastLaneAuction.json > contracts/abis/FastLaneAuctionAbi.json", "gen-relay-inheritance": "slither contracts/auction-handler/FastLaneAuctionHandler.sol --print inheritance-graph", "gen-relay-interface": "cast interface -n IFastLaneAuctionHandler -o contracts/interfaces/IFastLaneAuctionHandler.sol ./out/FastLaneAuctionHandler.sol/FastLaneAuctionHandler.json", "gen-relay-abi": "jq '.abi' out/FastLaneAuctionHandler.sol/FastLaneAuctionHandler.json > contracts/abis/FastLaneAuctionHandlerAbi.json", @@ -48,9 +43,7 @@ "sizes": "forge build --sizes", "relayTest": "forge test -vvv --match-contract PFLAuctionHandlerTest", "snapshot-relay": "source .env && forge snapshot -vvv --match-contract PFLAuctionHandlerTest --gas-report", - "auction-legacy-Test": "forge test -vvv --match-contract PFLAuctionTest", "solc": "solc-select install 0.8.16 && solc-select use 0.8.16", - "layout": "slither-read-storage contracts/legacy/FastLaneLegacyAuction.sol 0xc71cf7eb2839d864f356da13ebe22883fcbc9b0f --layout --solc-remaps 'ds-test/=./lib/forge-std/lib/ds-test/src/ eth-gas-reporter/=./node_modules/eth-gas-reporter/ forge-std/=./lib/forge-std/src/ hardhat/=./node_modules/hardhat/ openzeppelin-contracts/=./lib/openzeppelin-contracts/ openzeppelin-contracts-upgradeable/=./lib/openzeppelin-contracts-upgradeable/ solmate/=./lib/solmate/src/' --rpc-url http://localhost:8545 2> .storage-layout", "layout-relay": "slither-read-storage contracts/auction-handler/FastLaneAuctionHandler.sol 0x7D8Ade77A347Ba6ee34eac0f825Fc37B0A66B268 --layout --solc-remaps 'openzeppelin-contracts/=./lib/openzeppelin-contracts/ solmate/=./lib/solmate/src/' --rpc-url http://localhost:8545 2> .storage-relay-layout", "deploy-anvil-factory": "source .env && forge script script/PreProxyDeploy.s.sol:Deploy --fork-url http://localhost:8545 --private-key $TESTNET_KEY --broadcast", diff --git a/report/amber.png b/report/amber.png deleted file mode 100644 index 2cab170d8359081983a4e343848dfe06bc490f12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^G2tW}LqE04T&+ z;1OBOz`!j8!i<;h*8KqrvZOouIx;Y9?C1WI$O`1M1^9%x{(levWG - - - - - - LCOV - lcov.info - contracts/legacy/FastLaneLegacyAuction.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts - FastLaneAuction.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:178178100.0 %
Date:2022-11-15 17:07:48Functions:4343100.0 %
Branches:707494.6 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
FastLaneAuction._authorizeUpgrade1
FastLaneAuction.findLastFinalizedAuctionWinner1
FastLaneAuction.getPreferences1
FastLaneAuction.initialize1
FastLaneAuction.setBidToken1
FastLaneAuction.setPausedState1
FastLaneAuction.setStarter1
FastLaneAuction.withdrawStuckNativeToken1
FastLaneAuction.disableValidatorAddress2
FastLaneAuction.findFinalizedAuctionWinnerAtAuction2
FastLaneAuction.findLiveAuctionTopBid2
FastLaneAuction.getActivePrivilegesAuctionNumber2
FastLaneAuction.getStatus2
FastLaneAuction.initialSetupAuction2
FastLaneAuction.setMinimumBidIncrement2
FastLaneAuction.setOffchainCheckerDisabledState2
FastLaneAuction.setOps2
FastLaneAuction.setResolverMaxGasPrice2
FastLaneAuction.withdrawStuckERC202
FastLaneAuction.getValidatorsactiveAtAuctionRound3
FastLaneAuction.setAutopayBatchSize3
FastLaneAuction.disableOpportunityAddress4
FastLaneAuction.setMinimumAutoShipThreshold4
FastLaneAuction._refundPreviousBidder5
FastLaneAuction.processAutopayJobs5
FastLaneAuction.setValidatorPreferences5
FastLaneAuction.setFastlaneFee6
FastLaneAuction.enableValidatorAddressWithPreferences7
FastLaneAuction.getAutopayJobs7
FastLaneAuction._updateValidatorPreferences11
FastLaneAuction.redeemOutstandingBalance11
FastLaneAuction.getCheckpoint13
FastLaneAuction.enableValidatorAddress14
FastLaneAuction._redeemOutstanding16
FastLaneAuction.checker17
FastLaneAuction.enableOpportunityAddress17
FastLaneAuction._enableValidatorCheckpoint21
FastLaneAuction.endAuction21
FastLaneAuction.startAuction29
FastLaneAuction._receiveBid32
FastLaneAuction._calculateCuts41
FastLaneAuction.submitBid41
FastLaneAuction._checkRedeemableOutstanding47
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/FastLaneAuction.sol.func.html b/report/contracts/FastLaneAuction.sol.func.html deleted file mode 100644 index e3761c5..0000000 --- a/report/contracts/FastLaneAuction.sol.func.html +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/legacy/FastLaneLegacyAuction.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts - FastLaneAuction.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:178178100.0 %
Date:2022-11-15 17:07:48Functions:4343100.0 %
Branches:707494.6 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
FastLaneAuction._authorizeUpgrade1
FastLaneAuction._calculateCuts41
FastLaneAuction._checkRedeemableOutstanding47
FastLaneAuction._enableValidatorCheckpoint21
FastLaneAuction._receiveBid32
FastLaneAuction._redeemOutstanding16
FastLaneAuction._refundPreviousBidder5
FastLaneAuction._updateValidatorPreferences11
FastLaneAuction.checker17
FastLaneAuction.disableOpportunityAddress4
FastLaneAuction.disableValidatorAddress2
FastLaneAuction.enableOpportunityAddress17
FastLaneAuction.enableValidatorAddress14
FastLaneAuction.enableValidatorAddressWithPreferences7
FastLaneAuction.endAuction21
FastLaneAuction.findFinalizedAuctionWinnerAtAuction2
FastLaneAuction.findLastFinalizedAuctionWinner1
FastLaneAuction.findLiveAuctionTopBid2
FastLaneAuction.getActivePrivilegesAuctionNumber2
FastLaneAuction.getAutopayJobs7
FastLaneAuction.getCheckpoint13
FastLaneAuction.getPreferences1
FastLaneAuction.getStatus2
FastLaneAuction.getValidatorsactiveAtAuctionRound3
FastLaneAuction.initialSetupAuction2
FastLaneAuction.initialize1
FastLaneAuction.processAutopayJobs5
FastLaneAuction.redeemOutstandingBalance11
FastLaneAuction.setAutopayBatchSize3
FastLaneAuction.setBidToken1
FastLaneAuction.setFastlaneFee6
FastLaneAuction.setMinimumAutoShipThreshold4
FastLaneAuction.setMinimumBidIncrement2
FastLaneAuction.setOffchainCheckerDisabledState2
FastLaneAuction.setOps2
FastLaneAuction.setPausedState1
FastLaneAuction.setResolverMaxGasPrice2
FastLaneAuction.setStarter1
FastLaneAuction.setValidatorPreferences5
FastLaneAuction.startAuction29
FastLaneAuction.submitBid41
FastLaneAuction.withdrawStuckERC202
FastLaneAuction.withdrawStuckNativeToken1
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/FastLaneAuction.sol.gcov.html b/report/contracts/FastLaneAuction.sol.gcov.html deleted file mode 100644 index ce41e7f..0000000 --- a/report/contracts/FastLaneAuction.sol.gcov.html +++ /dev/null @@ -1,1049 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/legacy/FastLaneLegacyAuction.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts - FastLaneAuction.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:178178100.0 %
Date:2022-11-15 17:07:48Functions:4343100.0 %
Branches:707494.6 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : //SPDX-License-Identifier: Unlicensed
-       2                 :            : pragma solidity 0.8.16;
-       3                 :            : 
-       4                 :            : import "openzeppelin-contracts/contracts/utils/Address.sol";
-       5                 :            : import { SafeTransferLib, ERC20 } from "solmate/utils/SafeTransferLib.sol";
-       6                 :            : import { ReentrancyGuard } from "solmate/utils/ReentrancyGuard.sol";
-       7                 :            : import "openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol";
-       8                 :            : import "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol";
-       9                 :            : import "openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol";
-      10                 :            : import "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol";
-      11                 :            : 
-      12                 :            : 
-      13                 :            : /// @notice Auction bid struct
-      14                 :            : /// @dev Current owners need to allow opportunity and validator addresses to participate beforehands
-      15                 :            : /// @param validatorAddress Validator selected for the bid
-      16                 :            : /// @param opportunityAddress Opportunity selected for the bid
-      17                 :            : /// @param searcherContractAddress Contract that will be submitting transactions to `opportunityAddress`
-      18                 :            : /// @param searcherPayableAddress Searcher submitting the bid (currently restricted to msg.sender)
-      19                 :            : /// @param bidAmount Value of the bid
-      20                 :            : struct Bid {
-      21                 :            :     address validatorAddress;
-      22                 :            :     address opportunityAddress;
-      23                 :            :     address searcherContractAddress;
-      24                 :            :     address searcherPayableAddress;
-      25                 :            :     uint256 bidAmount;
-      26                 :            : }
-      27                 :            : 
-      28                 :            : /// @notice The type of a Status struct validator or opportunity
-      29                 :            : enum statusType {
-      30                 :            :     INVALID, // 0
-      31                 :            :     VALIDATOR, // 1 
-      32                 :            :     OPPORTUNITY // 2
-      33                 :            : }
-      34                 :            : 
-      35                 :            : /// @notice Status of validator or opportunity
-      36                 :            : /// @dev Status cannot be flipped for the current round, an opportunity or validator set up as inactive will always be able to receive bids until the end of the round it was triggered.
-      37                 :            : /// @param activeAtAuctionRound Auction round where entity will be enabled
-      38                 :            : /// @param inactiveAtAuctionRound Auction round at which entity will be disabled
-      39                 :            : /// @param kind From {statusType} 
-      40                 :            : struct Status {
-      41                 :            :     uint128 activeAtAuctionRound;
-      42                 :            :     uint128 inactiveAtAuctionRound;
-      43                 :            :     statusType kind;  
-      44                 :            : }
-      45                 :            : 
-      46                 :            : 
-      47                 :            : /// @notice Validator Balance Checkpoint
-      48                 :            : /// @dev By default checkpoints are checked every block by ops to see if there is amount to be paid ( > minAmount or > minAmoutForValidator)
-      49                 :            : /// @param pendingBalanceAtlastBid Deposits at `lastBidReceivedAuction`
-      50                 :            : /// @param outstandingBalance Balance accumulated between `lastWithdrawnAuction` and `lastBidReceivedAuction`
-      51                 :            : /// @param lastWithdrawnAuction Round when the validator withdrew
-      52                 :            : /// @param lastBidReceivedAuction Last auction around a bid was received for this validator
-      53                 :            : struct ValidatorBalanceCheckpoint {
-      54                 :            :     uint256 pendingBalanceAtlastBid;
-      55                 :            :     uint256 outstandingBalance;
-      56                 :            :     uint128 lastWithdrawnAuction;
-      57                 :            :     uint128 lastBidReceivedAuction;
-      58                 :            : }
-      59                 :            : 
-      60                 :            : /// @notice Validator Balances Shipping Preferences
-      61                 :            : /// @dev minAutoshipAmount will always be superseeded by contract level minAutoShipThreshold if lower
-      62                 :            : /// @param minAutoshipAmount Validator desired autoship threshold 
-      63                 :            : /// @param validatorPayableAddress Validator desired payable address
-      64                 :            : struct ValidatorPreferences {
-      65                 :            :     uint256 minAutoshipAmount;
-      66                 :            :     address validatorPayableAddress;
-      67                 :            : }
-      68                 :            : 
-      69                 :            : 
-      70                 :            : abstract contract FastLaneEvents {
-      71                 :            :     /***********************************|
-      72                 :            :     |             Events                |
-      73                 :            :     |__________________________________*/
-      74                 :            : 
-      75                 :            :     event MinimumBidIncrementSet(uint256 amount);
-      76                 :            :     event FastLaneFeeSet(uint256 amount);
-      77                 :            :     event BidTokenSet(address indexed token);
-      78                 :            :     event PausedStateSet(bool state);
-      79                 :            :     event OpsSet(address ops);
-      80                 :            :     event MinimumAutoshipThresholdSet(uint128 amount);
-      81                 :            :     event ResolverMaxGasPriceSet(uint128 amount);
-      82                 :            :     event AutopayBatchSizeSet(uint16 batch_size);
-      83                 :            :     event OpportunityAddressEnabled(
-      84                 :            :         address indexed opportunity,
-      85                 :            :         uint128 indexed auction_number
-      86                 :            :     );
-      87                 :            :     event OpportunityAddressDisabled(
-      88                 :            :         address indexed opportunity,
-      89                 :            :         uint128 indexed auction_number
-      90                 :            :     );
-      91                 :            :     event ValidatorAddressEnabled(
-      92                 :            :         address indexed validator,
-      93                 :            :         uint128 indexed auction_number
-      94                 :            :     );
-      95                 :            :     event ValidatorAddressDisabled(
-      96                 :            :         address indexed validator,
-      97                 :            :         uint128 indexed auction_number
-      98                 :            :     );
-      99                 :            :     event ValidatorWithdrawnBalance(
-     100                 :            :         address indexed validator,
-     101                 :            :         uint128 indexed auction_number,
-     102                 :            :         uint256 amount,
-     103                 :            :         address destination,
-     104                 :            :         address indexed caller
-     105                 :            : 
-     106                 :            :     );
-     107                 :            :     event AuctionStarted(uint128 indexed auction_number);
-     108                 :            : 
-     109                 :            :     event AuctionEnded(uint128 indexed auction_number);
-     110                 :            : 
-     111                 :            :     event AuctionStarterSet(address indexed starter);
-     112                 :            : 
-     113                 :            :     event WithdrawStuckERC20(
-     114                 :            :         address indexed receiver,
-     115                 :            :         address indexed token,
-     116                 :            :         uint256 amount
-     117                 :            :     );
-     118                 :            :     event WithdrawStuckNativeToken(address indexed receiver, uint256 amount);
-     119                 :            :    
-     120                 :            :     event BidAdded(
-     121                 :            :         address bidder,
-     122                 :            :         address indexed validator,
-     123                 :            :         address indexed opportunity,
-     124                 :            :         uint256 amount,
-     125                 :            :         uint256 indexed auction_number
-     126                 :            :     );
-     127                 :            : 
-     128                 :            :     event ValidatorPreferencesSet(address indexed validator, uint256 minAutoshipAmount, address validatorPayableAddress);
-     129                 :            : 
-     130                 :            :     error GeneralFailure();                            // E-000 // 0x2192efec
-     131                 :            : 
-     132                 :            :     error PermissionPaused();                          // E-101 // 0xeaa8b1af
-     133                 :            :     error PermissionNotOwner();                        // E-102 // 0xf599ea9e
-     134                 :            :     error PermissionOnlyFromPayorEoa();                // E-103 // 0x13272381
-     135                 :            :     error PermissionMustBeValidator();                 // E-104 // 0x4f4e9f3f
-     136                 :            :     error PermissionInvalidOpportunityAddress();       // E-105 // 0xcf440a8e
-     137                 :            :     error PermissionOnlyOps();                         // E-106 // 0x68da148f
-     138                 :            :     error PermissionNotOwnerNorStarter();              // E-107 // 0x8b4fb0bf
-     139                 :            :     error PermissionNotAllowed();                      // E-108 // 0xba6c5093
-     140                 :            : 
-     141                 :            :     error InequalityInvalidIndex();                    // E-201 // 0x102bd785
-     142                 :            :     error InequalityAddressMismatch();                 // E-202 // 0x17de231a
-     143                 :            :     error InequalityTooLow();                          // E-203 // 0x470b0adc
-     144                 :            :     error InequalityAlreadyTopBidder();                // E-204 // 0xeb14a775
-     145                 :            :     error InequalityNotEnoughFunds();                  // E-206 // 0x4587f24a
-     146                 :            :     error InequalityNothingToRedeem();                 // E-207 // 0x77a3b272
-     147                 :            :     error InequalityValidatorDisabledAtTime();         // E-209 // 0xa1ec46e6
-     148                 :            :     error InequalityOpportunityDisabledAtTime();       // E-210 // 0x8c81d8e9
-     149                 :            :     error InequalityValidatorNotEnabledYet();          // E-211 // 0x7a956c2e
-     150                 :            :     error InequalityOpportunityNotEnabledYet();        // E-212 // 0x333108d7
-     151                 :            :     error InequalityTooHigh();                         // E-213 // 0xfd11d092
-     152                 :            :     error InequalityWrongToken();                      // E-214 // 0xc9db890c
-     153                 :            : 
-     154                 :            :     error TimeNotWhenAuctionIsLive();                  // E-301 // 0x76a79c50
-     155                 :            :     error TimeNotWhenAuctionIsStopped();               // E-302 // 0x4eaf4896
-     156                 :            :     error TimeGasNotSuitable();                        // E-307 // 0xdd980aae
-     157                 :            :     error TimeAlreadyInit();                           // E-308 // 0xef34ca5c
-     158                 :            : 
-     159                 :            : }   
-     160                 :            : 
-     161                 :            : /// @title FastLaneAuction
-     162                 :            : /// @author Elyx0
-     163                 :            : /// @notice Fastlane.finance auction contract
-     164                 :            : contract FastLaneAuction is Initializable, OwnableUpgradeable , UUPSUpgradeable, ReentrancyGuard, FastLaneEvents {
-     165                 :            :     using Address for address payable;
-     166                 :            :     using EnumerableSet for EnumerableSet.AddressSet;
-     167                 :            :     using SafeTransferLib for ERC20;
-     168                 :            : 
-     169                 :            :     ERC20 public bid_token;
-     170                 :            : 
-     171                 :            :     constructor(address _newOwner) {
-     172                 :            :         _transferOwnership(_newOwner);
-     173                 :            :         _disableInitializers();
-     174                 :            :     }
-     175                 :            : 
-     176                 :            :     function initialize(address _newOwner) public initializer {
-     177                 :          1 :         __Ownable_init();
-     178                 :          1 :         __UUPSUpgradeable_init();
-     179                 :          1 :         _transferOwnership(_newOwner);
-     180                 :            :     }
-     181                 :            : 
-     182                 :            :     function _authorizeUpgrade(address) internal virtual override onlyOwner() {}
-     183                 :            : 
-     184                 :            : 
-     185                 :            :     /// @notice Initializes the auction
-     186                 :            :     /// @dev Also sets bid increment, resolver max gas, fee, autoship and batch size.
-     187                 :            :     /// @param _initial_bid_token ERC20 address to use for the auction
-     188                 :            :     /// @param _ops Operators address for crontabs
-     189                 :            :     /// @param _starter Address allowed to start/stop rounds
-     190                 :            :     function initialSetupAuction(address _initial_bid_token, address _ops, address _starter) external onlyOwner {
-     191         [ +  + ]:          2 :         if (auctionInitialized) revert TimeAlreadyInit();
-     192                 :          1 :         setBidToken(_initial_bid_token);
-     193                 :          1 :         setOps(_ops);
-     194                 :          1 :         auction_number = 1;
-     195                 :          1 :         setMinimumBidIncrement(10* (10**18));
-     196                 :          1 :         setMinimumAutoShipThreshold(2000* (10**18));
-     197                 :          1 :         setResolverMaxGasPrice(200 gwei);
-     198                 :          1 :         setFastlaneFee(50000);
-     199                 :          1 :         setAutopayBatchSize(10); 
-     200                 :          1 :         setStarter(_starter);
-     201                 :          1 :         auctionInitialized = true;
-     202                 :            :     }
-     203                 :            : 
-     204                 :            :     /// @notice Gelato Ops Address
-     205                 :            :     address public ops;
-     206                 :            : 
-     207                 :            :     // Variables mutable by owner via function calls
-     208                 :            : 
-     209                 :            :     /// @notice Minimum bid increment required on top of from the current top bid for a pair
-     210                 :            :     uint256 public bid_increment = 10 * (10**18);
-     211                 :            : 
-     212                 :            : 
-     213                 :            :     /// @notice Minimum amount for Validator Preferences to get the profits airdropped
-     214                 :            :     uint128 public minAutoShipThreshold = 2000 * (10**18); // Validators balances > 2k should get auto-transfered
-     215                 :            : 
-     216                 :            :     /// @notice Current auction round, 
-     217                 :            :     /// @dev Offset by 1 so payouts are at 0. In general payouts are for round n-1.
-     218                 :            :     uint128 public auction_number = 1;
-     219                 :            : 
-     220                 :            :     uint128 public constant MAX_AUCTION_VALUE = type(uint128).max; // 2**128 - 1
-     221                 :            : 
-     222                 :            :     /// @notice Max gas price for ops to attempt autopaying pending balances over threshold
-     223                 :            :     uint128 public max_gas_price = 200 gwei;
-     224                 :            : 
-     225                 :            :     /// @notice Fee (out of one million)
-     226                 :            :     uint24 public fast_lane_fee = 50000; 
-     227                 :            : 
-     228                 :            :     /// @notice Number of validators to pay per gelato action
-     229                 :            :     uint16 public autopay_batch_size = 10;
-     230                 :            : 
-     231                 :            :     /// @notice Auction live status
-     232                 :            :     bool public auction_live = false;
-     233                 :            : 
-     234                 :            :     bool internal paused = false;
-     235                 :            : 
-     236                 :            :     /// @notice Ops crontab disabled
-     237                 :            :     bool internal _offchain_checker_disabled = false;
-     238                 :            : 
-     239                 :            :     /// @notice Tracks status of seen addresses and when they become eligible for bidding
-     240                 :            :     mapping(address => Status) internal statusMap;
-     241                 :            : 
-     242                 :            :     /// @notice Tracks bids per auction_number per pair
-     243                 :            :     mapping(uint256 => mapping(address => mapping(address => Bid)))
-     244                 :            :         internal auctionsMap;
-     245                 :            : 
-     246                 :            :     /// @notice Validators participating in the auction for a round
-     247                 :            :     mapping(uint128 => EnumerableSet.AddressSet) internal validatorsactiveAtAuctionRound;
-     248                 :            : 
-     249                 :            :     /// @notice Validators cuts to be withdraw or dispatched regularly
-     250                 :            :     mapping(address => ValidatorBalanceCheckpoint) internal validatorsCheckpoints;
-     251                 :            : 
-     252                 :            :     /// @notice Validator preferences for payment and min autoship amount
-     253                 :            :     mapping(address => ValidatorPreferences) internal validatorsPreferences;
-     254                 :            : 
-     255                 :            :     /// @notice Auto cleared by EndAuction every round
-     256                 :            :     uint256 public outstandingFLBalance = 0;
-     257                 :            : 
-     258                 :            :     /// @notice Start & Stop auction role
-     259                 :            :     address public auctionStarter;
-     260                 :            : 
-     261                 :            :     /// @notice Auction was initialized
-     262                 :            :     bool public auctionInitialized = false;
-     263                 :            : 
-     264                 :            :     /// @notice Internally updates a validator preference
-     265                 :            :     /// @dev Only callable by an already setup validator, and only for themselves via {setValidatorPreferences}
-     266                 :            :     /// @param _target Validator to update
-     267                 :            :     /// @param _minAutoshipAmount Amount desired before autoship kicks in
-     268                 :            :     /// @param _validatorPayableAddress Address the auction proceeds will go to for this validator
-     269                 :            :     function _updateValidatorPreferences(address _target, uint128 _minAutoshipAmount, address _validatorPayableAddress) internal {
-     270         [ +  + ]:         11 :         if(_minAutoshipAmount < minAutoShipThreshold) revert InequalityTooLow();
-     271         [ +  + ]:         10 :         if((_validatorPayableAddress == address(0)) || (_validatorPayableAddress == address(this))) revert InequalityAddressMismatch();
-     272                 :            :         
-     273                 :          9 :         validatorsPreferences[_target] = ValidatorPreferences(_minAutoshipAmount, _validatorPayableAddress);
-     274                 :          9 :         emit ValidatorPreferencesSet(_target,_minAutoshipAmount, _validatorPayableAddress);
-     275                 :            :     }
-     276                 :            : 
-     277                 :            :     /***********************************|
-     278                 :            :     |         Validator-only            |
-     279                 :            :     |__________________________________*/
-     280                 :            : 
-     281                 :            :     /// @notice Internally updates a validator preference
-     282                 :            :     /// @dev Only callable by an already setup validator via {onlyValidator}
-     283                 :            :     /// @param _minAutoshipAmount Amount desired before autoship kicks in
-     284                 :            :     /// @param _validatorPayableAddress Address the auction proceeds will go to for this validator
-     285                 :            :     function setValidatorPreferences(uint128 _minAutoshipAmount, address _validatorPayableAddress) external onlyValidator {
-     286                 :          4 :         _updateValidatorPreferences(msg.sender, _minAutoshipAmount, _validatorPayableAddress);
-     287                 :            :     }
-     288                 :            : 
-     289                 :            :     /***********************************|
-     290                 :            :     |             Owner-only            |
-     291                 :            :     |__________________________________*/
-     292                 :            : 
-     293                 :            :     /// @notice Defines the paused state of the Auction
-     294                 :            :     /// @dev Only owner
-     295                 :            :     /// @param _state New state
-     296                 :            :     function setPausedState(bool _state) external onlyOwner {
-     297                 :          1 :         paused = _state;
-     298                 :          1 :         emit PausedStateSet(_state);
-     299                 :            :     }
-     300                 :            : 
-     301                 :            :     /// @notice Sets minimum bid increment 
-     302                 :            :     /// @dev Used to avoid people micro-bidding up by .000000001
-     303                 :            :     /// @param _bid_increment New increment
-     304                 :            :     function setMinimumBidIncrement(uint256 _bid_increment) public onlyOwner {
-     305                 :          3 :         bid_increment = _bid_increment;
-     306                 :          3 :         emit MinimumBidIncrementSet(_bid_increment);
-     307                 :            :     }
-     308                 :            : 
-     309                 :            :     /// @notice Sets address of Ops
-     310                 :            :     /// @dev Ops is allowed to call {processAutopayJobs}
-     311                 :            :     /// @param _ops New operator of crontabs
-     312                 :            :     function setOps(address _ops) public onlyOwner {
-     313                 :          3 :         ops = _ops;
-     314                 :          3 :         emit OpsSet(_ops);
-     315                 :            :     }
-     316                 :            : 
-     317                 :            :     /// @notice Sets minimum balance a checkpoint must meet to be considered for autoship
-     318                 :            :     /// @dev This amount will always override validator preferences if greater
-     319                 :            :     /// @param _minAmount Minimum amount
-     320                 :            :     function setMinimumAutoShipThreshold(uint128 _minAmount) public onlyOwner {
-     321                 :          5 :         minAutoShipThreshold = _minAmount;
-     322                 :          5 :         emit MinimumAutoshipThresholdSet(_minAmount);
-     323                 :            :     }
-     324                 :            : 
-     325                 :            :     /// @notice Sets maximum network gas for autoship
-     326                 :            :     /// @dev Past this value autoship will have to be manually called until gwei goes lower or this gets upped
-     327                 :            :     /// @param _maxgas Maximum gas
-     328                 :            :     function setResolverMaxGasPrice(uint128 _maxgas) public onlyOwner {
-     329                 :          3 :         max_gas_price = _maxgas;
-     330                 :          3 :         emit ResolverMaxGasPriceSet(_maxgas);
-     331                 :            :     }
-     332                 :            : 
-     333                 :            :     /// @notice Sets the protocol fee (out of 1000000 (ie v2 fee decimals))
-     334                 :            :     /// @dev Initially set to 50000 (5%) For now we can't change the fee during an ongoing auction since the bids do not store the fee value at bidding time
-     335                 :            :     /// @param _fastLaneFee Protocl fee on bids
-     336                 :            :     function setFastlaneFee(uint24 _fastLaneFee)
-     337                 :            :         public
-     338                 :            :         onlyOwner
-     339                 :            :         notLiveStage
-     340                 :            :     {
-     341         [ +  + ]:          7 :         if (_fastLaneFee > 1000000) revert InequalityTooHigh();
-     342                 :          6 :         fast_lane_fee = _fastLaneFee;
-     343                 :          6 :         emit FastLaneFeeSet(_fastLaneFee);
-     344                 :            :     }
-     345                 :            : 
-     346                 :            :     /// @notice Sets the ERC20 token that is treated as the base currency for bidding purposes
-     347                 :            :     /// @dev Initially set to WMATIC, changing it is not allowed during auctions, special considerations must be taken care of if changing this value, such as paying all outstanding validators first to not mix ERC's.
-     348                 :            :     /// @param _bid_token_address Address of the bid token
-     349                 :            :     function setBidToken(address _bid_token_address)
-     350                 :            :         public
-     351                 :            :         onlyOwner
-     352                 :            :         notLiveStage
-     353                 :            :     {
-     354                 :            :         // Prevent QBridge Finance issues
-     355         [ +  + ]:          2 :         if (_bid_token_address == address(0)) revert GeneralFailure();
-     356                 :          1 :         bid_token = ERC20(_bid_token_address);
-     357                 :          1 :         emit BidTokenSet(_bid_token_address);
-     358                 :            :     }
-     359                 :            : 
-     360                 :            : 
-     361                 :            :     /// @notice Sets the auction starter role
-     362                 :            :     /// @dev Both owner and starter will be able to trigger starts/stops
-     363                 :            :     /// @param _starter Address of the starter role
-     364                 :            :     function setStarter(address _starter) public onlyOwner {
-     365                 :          2 :         auctionStarter = _starter;
-     366                 :          2 :         emit AuctionStarterSet(auctionStarter);
-     367                 :            :     }
-     368                 :            : 
-     369                 :            : 
-     370                 :            :     /// @notice Adds an address to the allowed entity mapping as opportunity
-     371                 :            :     /// @dev Should be a router/aggregator etc. Opportunities are queued to the next auction
-     372                 :            :     /// @dev Do not use on already enabled opportunity or it will be stopped for current auction round
-     373                 :            :     /// @param _opportunityAddress Address of the opportunity
-     374                 :            :     function enableOpportunityAddress(address _opportunityAddress)
-     375                 :            :         external
-     376                 :            :         onlyOwner
-     377                 :            :     {
-     378                 :            :         // Enable for after auction ends if live
-     379                 :         17 :         uint128 target_auction_number = auction_live ? auction_number + 1 : auction_number;
-     380                 :         17 :         statusMap[_opportunityAddress] = Status(target_auction_number, MAX_AUCTION_VALUE, statusType.OPPORTUNITY);
-     381                 :         17 :         emit OpportunityAddressEnabled(_opportunityAddress, target_auction_number);
-     382                 :            :     }
-     383                 :            : 
-     384                 :            :     /// @notice Disables an opportunity
-     385                 :            :     /// @dev If auction is live, only takes effect at next round
-     386                 :            :     /// @param _opportunityAddress Address of the opportunity
-     387                 :            :     function disableOpportunityAddress(address _opportunityAddress)
-     388                 :            :         external
-     389                 :            :         onlyOwner
-     390                 :            :     {
-     391                 :          4 :         Status storage existingStatus = statusMap[_opportunityAddress];
-     392         [ +  + ]:          4 :         if (existingStatus.kind != statusType.OPPORTUNITY) revert PermissionInvalidOpportunityAddress();
-     393                 :          3 :         uint128 target_auction_number = auction_live ? auction_number + 1 : auction_number;
-     394                 :            : 
-     395                 :          3 :         existingStatus.inactiveAtAuctionRound = target_auction_number;
-     396                 :          3 :         emit OpportunityAddressDisabled(_opportunityAddress, target_auction_number);
-     397                 :            :     }
-     398                 :            : 
-     399                 :            :     /// @notice Internal, enables a validator checkpoint
-     400                 :            :     /// @dev If auction is live, only takes effect at next round
-     401                 :            :     /// @param _validatorAddress Address of the validator
-     402                 :            :     function _enableValidatorCheckpoint(address _validatorAddress) internal {
-     403                 :         21 :         uint128 target_auction_number = auction_live ? auction_number + 1 : auction_number;
-     404                 :         21 :         statusMap[_validatorAddress] = Status(target_auction_number, MAX_AUCTION_VALUE, statusType.VALIDATOR);
-     405                 :            :         
-     406                 :            :         // Create the checkpoint for the Validator
-     407                 :         21 :         ValidatorBalanceCheckpoint memory valCheckpoint = validatorsCheckpoints[_validatorAddress];
-     408         [ +  + ]:         21 :         if (valCheckpoint.lastBidReceivedAuction == 0) {
-     409                 :         20 :             validatorsCheckpoints[_validatorAddress] = ValidatorBalanceCheckpoint(0, 0, 0, 0);
-     410                 :            :         } 
-     411                 :         21 :         emit ValidatorAddressEnabled(_validatorAddress, target_auction_number);
-     412                 :            :     }
-     413                 :            : 
-     414                 :            :     /// @notice Enables a validator checkpoint
-     415                 :            :     /// @dev If auction is live, only takes effect at next round
-     416                 :            :     /// @param _validatorAddress Address of the validator
-     417                 :            :     function enableValidatorAddress(address _validatorAddress)
-     418                 :            :         external
-     419                 :            :         onlyOwner
-     420                 :            :     {
-     421                 :         14 :        _enableValidatorCheckpoint(_validatorAddress);
-     422                 :            :     }
-     423                 :            : 
-     424                 :            :     /// @notice Enables a validator checkpoint and sets preferences
-     425                 :            :     /// @dev If auction is live, only takes effect at next round
-     426                 :            :     /// @param _validatorAddress Address of the validator
-     427                 :            :     /// @param _minAutoshipAmount Amount desired before autoship kicks in
-     428                 :            :     /// @param _validatorPayableAddress Address the auction proceeds will go to for this validator
-     429                 :            :     function enableValidatorAddressWithPreferences(address _validatorAddress, uint128 _minAutoshipAmount, address _validatorPayableAddress) 
-     430                 :            :         external
-     431                 :            :         onlyOwner
-     432                 :            :     {
-     433                 :          7 :             _enableValidatorCheckpoint(_validatorAddress);
-     434                 :          7 :             _updateValidatorPreferences(_validatorAddress, _minAutoshipAmount, _validatorPayableAddress);
-     435                 :            :     }
-     436                 :            : 
-     437                 :            :     /// @notice Disables a validator
-     438                 :            :     /// @dev If auction is live, only takes effect at next round
-     439                 :            :     /// @param _validatorAddress Address of the validator
-     440                 :            :     function disableValidatorAddress(address _validatorAddress)
-     441                 :            :         external
-     442                 :            :         onlyOwner
-     443                 :            :     {
-     444                 :          2 :         Status storage existingStatus = statusMap[_validatorAddress];
-     445         [ +  + ]:          2 :         if (existingStatus.kind != statusType.VALIDATOR) revert PermissionMustBeValidator();
-     446                 :          1 :         uint128 target_auction_number = auction_live ? auction_number + 1 : auction_number;
-     447                 :            : 
-     448                 :          1 :         existingStatus.inactiveAtAuctionRound = target_auction_number;
-     449                 :          1 :         emit ValidatorAddressDisabled(_validatorAddress, target_auction_number);
-     450                 :            :     }
-     451                 :            : 
-     452                 :            :     /// @notice Start auction round / Enable bidding
-     453                 :            :     /// @dev Both starter and owner roles are allowed to start
-     454                 :            :     function startAuction() external onlyStarterOrOwner notLiveStage {
-     455                 :         28 :         auction_live = true;
-     456                 :         28 :         emit AuctionStarted(auction_number);
-     457                 :            :     }
-     458                 :            : 
-     459                 :            :     /// @notice Ends an auction round
-     460                 :            :     /// @dev Ending an auction round transfers the cuts to PFL and enables validators to collect theirs from the auction that ended
-     461                 :            :     /// @dev Also enables fastlane privileges of pairs winners until endAuction gets called again at next auction round
-     462                 :            :     function endAuction()
-     463                 :            :         external
-     464                 :            :         onlyStarterOrOwner
-     465                 :            :         atLiveStage
-     466                 :            :         nonReentrant
-     467                 :            :         returns (bool)
-     468                 :            :     {
-     469                 :            : 
-     470                 :         21 :         auction_live = false;
-     471                 :            : 
-     472                 :         21 :         emit AuctionEnded(auction_number);
-     473                 :            : 
-     474                 :            :         // Increment auction_number so the checkpoints are available.
-     475                 :         21 :         ++auction_number;
-     476                 :            : 
-     477                 :         21 :         uint256 ownerBalance = outstandingFLBalance;
-     478                 :         21 :         outstandingFLBalance = 0;
-     479                 :            : 
-     480                 :            :         // Last for C-E-I.
-     481                 :         21 :         bid_token.safeTransfer(owner(), ownerBalance);
-     482                 :            : 
-     483                 :         21 :         return true;
-     484                 :            :     }
-     485                 :            : 
-     486                 :            :     /// @notice Sets autopay batch size
-     487                 :            :     /// @dev Defines the maximum number of addresses the ops will try to pay outstanding balances per block
-     488                 :            :     /// @param _size Size of the batch
-     489                 :            :     function setAutopayBatchSize(uint16 _size) public onlyOwner {
-     490                 :          4 :         autopay_batch_size = _size;
-     491                 :          4 :         emit AutopayBatchSizeSet(autopay_batch_size);
-     492                 :            :     }
-     493                 :            : 
-     494                 :            :     /// @notice Defines if the offchain checked is disabled
-     495                 :            :     /// @dev If true autoship will be disabled
-     496                 :            :     /// @param _state Disabled state
-     497                 :            :     function setOffchainCheckerDisabledState(bool _state) external onlyOwner {
-     498                 :          2 :         _offchain_checker_disabled = _state;
-     499                 :            :     }
-     500                 :            : 
-     501                 :            :     /// @notice Withdraws stuck matic
-     502                 :            :     /// @dev In the event people send matic instead of WMATIC we can send it back 
-     503                 :            :     /// @param _amount Amount to send to owner
-     504                 :            :     function withdrawStuckNativeToken(uint256 _amount)
-     505                 :            :         external
-     506                 :            :         onlyOwner
-     507                 :            :         nonReentrant
-     508                 :            :     {
-     509         [ +  + ]:          1 :         if (address(this).balance >= _amount) {
-     510                 :          1 :             payable(owner()).sendValue(_amount);
-     511                 :          1 :             emit WithdrawStuckNativeToken(owner(), _amount);
-     512                 :            :         }
-     513                 :            :     }
-     514                 :            : 
-     515                 :            :     /// @notice Withdraws stuck ERC20
-     516                 :            :     /// @dev In the event people send ERC20 instead of bid_token ERC20 we can send them back 
-     517                 :            :     /// @param _tokenAddress Address of the stuck token
-     518                 :            :     function withdrawStuckERC20(address _tokenAddress)
-     519                 :            :         external
-     520                 :            :         onlyOwner
-     521                 :            :         nonReentrant
-     522                 :            :     {
-     523         [ +  + ]:          2 :         if (_tokenAddress == address(bid_token)) revert InequalityWrongToken();
-     524                 :          1 :         ERC20 oopsToken = ERC20(_tokenAddress);
-     525                 :          1 :         uint256 oopsTokenBalance = oopsToken.balanceOf(address(this));
-     526                 :            : 
-     527         [ +  + ]:          1 :         if (oopsTokenBalance > 0) {
-     528                 :          1 :             oopsToken.safeTransfer(owner(), oopsTokenBalance);
-     529                 :          1 :             emit WithdrawStuckERC20(address(this), owner(), oopsTokenBalance);
-     530                 :            :         }
-     531                 :            :     }
-     532                 :            : 
-     533                 :            :     /// @notice Internal, receives a bid
-     534                 :            :     /// @dev Requires approval of this contract beforehands
-     535                 :            :     /// @param _currentTopBidAmount Value of the current top bid
-     536                 :            :     /// @param _currentTopBidSearcherPayableAddress Address of the current top bidder for that bid pair
-     537                 :            :     function _receiveBid(
-     538                 :            :         Bid memory bid,
-     539                 :            :         uint256 _currentTopBidAmount,
-     540                 :            :         address _currentTopBidSearcherPayableAddress
-     541                 :            :     ) internal {
-     542                 :            :         // Verify the bid exceeds previous bid + minimum increment
-     543         [ +  + ]:         32 :         if (bid.bidAmount < _currentTopBidAmount + bid_increment) revert InequalityTooLow();
-     544                 :            : 
-     545                 :            :         // Verify the new bidder isnt the previous bidder as self-spam protection
-     546         [ +  + ]:         28 :         if (bid.searcherPayableAddress == _currentTopBidSearcherPayableAddress) revert InequalityAlreadyTopBidder();
-     547                 :            : 
-     548                 :            :         // Verify the bidder has the balance.
-     549         [ +  + ]:         27 :         if (bid_token.balanceOf(bid.searcherPayableAddress) < bid.bidAmount) revert InequalityNotEnoughFunds();
-     550                 :            : 
-     551                 :            :         // Transfer the bid amount (requires approval)
-     552                 :         26 :         bid_token.safeTransferFrom(
-     553                 :            :             bid.searcherPayableAddress,
-     554                 :            :             address(this),
-     555                 :            :             bid.bidAmount
-     556                 :            :         );
-     557                 :            :     }
-     558                 :            : 
-     559                 :            :     /// @notice Internal, refunds previous top bidder
-     560                 :            :     /// @dev Be very careful about changing bid token to any ERC777
-     561                 :            :     /// @param bid Bid to refund
-     562                 :            :     function _refundPreviousBidder(Bid memory bid) internal {
-     563                 :          5 :         bid_token.safeTransfer(
-     564                 :            :             bid.searcherPayableAddress,
-     565                 :            :             bid.bidAmount
-     566                 :            :         );
-     567                 :            :     }
-     568                 :            : 
-     569                 :            :     /// @notice Internal, calculates cuts
-     570                 :            :     /// @dev vCut 
-     571                 :            :     /// @param amount Amount to calculates cuts from
-     572                 :            :     /// @return vCut validator cut
-     573                 :            :     /// @return flCut protocol cut
-     574                 :            :     function _calculateCuts(uint256 amount) internal view returns (uint256 vCut, uint256 flCut) {
-     575                 :         41 :         vCut = (amount * (1000000 - fast_lane_fee)) / 1000000;
-     576                 :         41 :         flCut = amount - vCut;
-     577                 :            :     }
-     578                 :            : 
-     579                 :            :     /// @notice Internal, calculates if a validator balance checkpoint is redeemable as of current auction_number against a certain amount
-     580                 :            :     /// @dev Not pure, depends of global auction_number, could be only outstandingBalance or outstandingBalance + pendingBalanceAtlastBid if last bid was at an oldest round than auction_number
-     581                 :            :     /// @param valCheckpoint Validator checkpoint to validate against `minAmount`
-     582                 :            :     /// @param minAmount Amount to calculates cuts from
-     583                 :            :     /// @return bool Is there balance to redeem for validator and amount at current auction_number
-     584                 :            :     function _checkRedeemableOutstanding(ValidatorBalanceCheckpoint memory valCheckpoint,uint256 minAmount) internal view returns (bool) {
-     585                 :         47 :         return valCheckpoint.outstandingBalance >= minAmount || ((valCheckpoint.lastBidReceivedAuction < auction_number) && ((valCheckpoint.pendingBalanceAtlastBid + valCheckpoint.outstandingBalance) >= minAmount));    
-     586                 :            :     }
-     587                 :            : 
-     588                 :            :     /// @notice Internal, attemps to redeem a validator outstanding balance to its validatorPayableAddress
-     589                 :            :     /// @dev Must be owed at least 1 of `bid_token`
-     590                 :            :     /// @param _outstandingValidatorWithBalance Validator address
-     591                 :            :     function _redeemOutstanding(address _outstandingValidatorWithBalance) internal {
-     592         [ +  + ]:         16 :         if (statusMap[_outstandingValidatorWithBalance].kind != statusType.VALIDATOR) revert PermissionMustBeValidator();
-     593                 :         15 :         ValidatorBalanceCheckpoint storage valCheckpoint = validatorsCheckpoints[_outstandingValidatorWithBalance];
-     594                 :            :        
-     595                 :            :         // Either we have outstandingBalance or we have pendingBalanceAtlastBid from previous auctions.
-     596         [ +  + ]:         15 :         if (!_checkRedeemableOutstanding(valCheckpoint, 1)) revert InequalityNothingToRedeem();
-     597                 :            : 
-     598                 :         12 :         uint256 redeemable = 0;
-     599         [ +  + ]:         12 :         if (valCheckpoint.lastBidReceivedAuction < auction_number) {
-     600                 :            :             // We can redeem both
-     601                 :         10 :             redeemable = valCheckpoint.pendingBalanceAtlastBid + valCheckpoint.outstandingBalance;
-     602                 :         10 :             valCheckpoint.pendingBalanceAtlastBid = 0;
-     603                 :            :         } else {
-     604                 :            :             // Another bid was received in the current auction, profits were already moved
-     605                 :            :             // to outstandingBalance by the bidder
-     606                 :          2 :             redeemable = valCheckpoint.outstandingBalance;
-     607                 :            :         }
-     608                 :            : 
-     609                 :            :         // Clear outstanding in any case.
-     610                 :         12 :         valCheckpoint.outstandingBalance = 0;
-     611                 :         12 :         valCheckpoint.lastWithdrawnAuction = auction_number;
-     612                 :            : 
-     613                 :         12 :         address dst = _outstandingValidatorWithBalance;
-     614                 :         12 :         ValidatorPreferences memory valPrefs = validatorsPreferences[dst];
-     615         [ +  + ]:         12 :         if (valPrefs.validatorPayableAddress != address(0)) {
-     616                 :          5 :             dst = valPrefs.validatorPayableAddress;
-     617                 :            :         }
-     618                 :            : 
-     619                 :         12 :         bid_token.safeTransfer(
-     620                 :            :             dst,
-     621                 :            :             redeemable
-     622                 :            :         );
-     623                 :            : 
-     624                 :         12 :         emit ValidatorWithdrawnBalance(
-     625                 :            :             _outstandingValidatorWithBalance,
-     626                 :            :             auction_number,
-     627                 :            :             redeemable,
-     628                 :            :             dst,
-     629                 :            :             msg.sender
-     630                 :            :         );
-     631                 :            :     }
-     632                 :            : 
-     633                 :            :     /***********************************|
-     634                 :            :     |             Public                |
-     635                 :            :     |__________________________________*/
-     636                 :            : 
-     637                 :            : 
-     638                 :            :     /// @notice Bidding function for searchers to submit their bids
-     639                 :            :     /// @dev Each bid pulls funds on submission and searchers are refunded when they are outbid
-     640                 :            :     /// @param bid Bid struct as tuple (validatorAddress, opportunityAddress, searcherContractAddress ,searcherPayableAddress, bidAmount)
-     641                 :            :     function submitBid(Bid calldata bid)
-     642                 :            :         external
-     643                 :            :         atLiveStage
-     644                 :            :         whenNotPaused
-     645                 :            :         nonReentrant
-     646                 :            :     {
-     647                 :            :         // Verify that the bid is coming from the EOA that's paying
-     648         [ +  + ]:         40 :         if (msg.sender != bid.searcherPayableAddress) revert PermissionOnlyFromPayorEoa();
-     649                 :            : 
-     650                 :         39 :         Status memory validatorStatus = statusMap[bid.validatorAddress];
-     651                 :         39 :         Status memory opportunityStatus = statusMap[bid.opportunityAddress];
-     652                 :            : 
-     653                 :            :         // Verify that the opportunity and the validator are both participating addresses
-     654         [ +  + ]:         39 :         if (validatorStatus.kind != statusType.VALIDATOR) revert PermissionMustBeValidator();
-     655         [ +  + ]:         38 :         if (opportunityStatus.kind != statusType.OPPORTUNITY) revert PermissionInvalidOpportunityAddress();
-     656                 :            : 
-     657                 :            :         // We want auction_number be in the [activeAtAuctionRound - inactiveAtAuctionRound] window.
-     658                 :            :         // Verify not flagged as inactive
-     659         [ +  + ]:         37 :         if (validatorStatus.inactiveAtAuctionRound <= auction_number) revert InequalityValidatorDisabledAtTime();
-     660         [ +  + ]:         35 :         if (opportunityStatus.inactiveAtAuctionRound <= auction_number) revert InequalityOpportunityDisabledAtTime();
-     661                 :            : 
-     662                 :            :         // Verify still flagged active
-     663         [ +  + ]:         34 :         if (validatorStatus.activeAtAuctionRound > auction_number) revert InequalityValidatorNotEnabledYet();
-     664         [ +  + ]:         33 :         if (opportunityStatus.activeAtAuctionRound > auction_number) revert InequalityOpportunityNotEnabledYet();
-     665                 :            : 
-     666                 :            : 
-     667                 :            :         // Figure out if we have an existing bid 
-     668                 :         32 :         Bid memory current_top_bid = auctionsMap[auction_number][
-     669                 :            :                 bid.validatorAddress
-     670                 :            :             ][bid.opportunityAddress];
-     671                 :            : 
-     672                 :         32 :         ValidatorBalanceCheckpoint storage valCheckpoint = validatorsCheckpoints[bid.validatorAddress];
-     673                 :            : 
-     674         [ +  + ]:         32 :         if ((valCheckpoint.lastBidReceivedAuction != auction_number) && (valCheckpoint.pendingBalanceAtlastBid > 0)) {
-     675                 :            :             // Need to move pending to outstanding
-     676                 :          4 :             valCheckpoint.outstandingBalance += valCheckpoint.pendingBalanceAtlastBid;
-     677                 :          4 :             valCheckpoint.pendingBalanceAtlastBid = 0;
-     678                 :            :         }
-     679                 :            :  
-     680                 :            :         // Update bid for pair
-     681                 :         32 :         auctionsMap[auction_number][bid.validatorAddress][
-     682                 :            :                 bid.opportunityAddress
-     683                 :            :             ] = bid;
-     684                 :            : 
-     685         [ +  + ]:         32 :         if (current_top_bid.bidAmount > 0) {
-     686                 :            :             // Existing bid for this auction number && pair combo
-     687                 :            :             // Handle checkpoint cuts replacement
-     688                 :          9 :             (uint256 vCutPrevious, uint256 flCutPrevious) = _calculateCuts(current_top_bid.bidAmount);
-     689                 :          9 :             (uint256 vCut, uint256 flCut) = _calculateCuts(bid.bidAmount);
-     690                 :            : 
-     691                 :          9 :             outstandingFLBalance = outstandingFLBalance + flCut - flCutPrevious;
-     692                 :          9 :             valCheckpoint.pendingBalanceAtlastBid =  valCheckpoint.pendingBalanceAtlastBid + vCut - vCutPrevious;
-     693                 :            : 
-     694                 :            : 
-     695                 :            :             // Update the existing Bid mapping
-     696                 :          9 :             _receiveBid(
-     697                 :            :                 bid,
-     698                 :            :                 current_top_bid.bidAmount,
-     699                 :            :                 current_top_bid.searcherPayableAddress
-     700                 :            :             );
-     701                 :          5 :             _refundPreviousBidder(current_top_bid);
-     702                 :            : 
-     703                 :            :            
-     704                 :            :         } else {
-     705                 :            :             // First bid on pair for this auction number
-     706                 :            :             // Update checkpoint if needed as another pair could have bid already for this auction number
-     707                 :            :             
-     708         [ +  + ]:         23 :             if (valCheckpoint.lastBidReceivedAuction != auction_number) {
-     709                 :         23 :                 valCheckpoint.lastBidReceivedAuction = auction_number;
-     710                 :            :             }
-     711                 :            : 
-     712                 :         23 :             (uint256 vCutFirst, uint256 flCutFirst) = _calculateCuts(bid.bidAmount);
-     713                 :            : 
-     714                 :            :             // Handle cuts
-     715                 :         23 :             outstandingFLBalance += flCutFirst;
-     716                 :         23 :             valCheckpoint.pendingBalanceAtlastBid += vCutFirst;
-     717                 :            : 
-     718                 :            :              // Check balance
-     719                 :         23 :             _receiveBid(bid, 0, address(0));
-     720                 :            :             
-     721                 :            : 
-     722                 :            :         }
-     723                 :            : 
-     724                 :            :         // Try adding to the validatorsactiveAtAuctionRound so the keeper can loop on it
-     725                 :            :         // EnumerableSet already checks key pre-existence
-     726                 :         25 :         validatorsactiveAtAuctionRound[auction_number].add(bid.validatorAddress);
-     727                 :            : 
-     728                 :         25 :         emit BidAdded(
-     729                 :            :             bid.searcherContractAddress,
-     730                 :            :             bid.validatorAddress,
-     731                 :            :             bid.opportunityAddress,
-     732                 :            :             bid.bidAmount,
-     733                 :            :             auction_number
-     734                 :            :         );
-     735                 :            :     }
-     736                 :            : 
-     737                 :            :     /// @notice Validators can always withdraw right after an amount is due
-     738                 :            :     /// @dev It can be during an ongoing auction with pendingBalanceAtlastBid being the current auction
-     739                 :            :     /// @dev Or lastBidReceivedAuction being a previous auction, in which case outstanding+pending can be withdrawn
-     740                 :            :     /// @dev _Anyone_ can initiate a validator to be paid what it's owed
-     741                 :            :     /// @param _outstandingValidatorWithBalance Redeems outstanding balance for a validator
-     742                 :            :     function redeemOutstandingBalance(address _outstandingValidatorWithBalance)
-     743                 :            :         external
-     744                 :            :         whenNotPaused
-     745                 :            :         nonReentrant
-     746                 :            :     {
-     747                 :         11 :         _redeemOutstanding(_outstandingValidatorWithBalance);
-     748                 :            :     }
-     749                 :            : 
-     750                 :            :     /***********************************|
-     751                 :            :     |       Public Resolvers            |
-     752                 :            :     |__________________________________*/
-     753                 :            : 
-     754                 :            :     /// @notice Gelato Offchain Resolver
-     755                 :            :     /// @dev Automated function checked each block offchain by Gelato Network if there is outstanding payments to process
-     756                 :            :     /// @return canExec Should the worker trigger
-     757                 :            :     /// @return execPayload The payload if canExec is true
-     758                 :            :     function checker()
-     759                 :            :         external
-     760                 :            :         view
-     761                 :            :         returns (bool canExec, bytes memory execPayload)
-     762                 :            :     {
-     763         [ +  + ]:         17 :         if (_offchain_checker_disabled || paused  || tx.gasprice > max_gas_price) return (false, "");
-     764                 :            :             // Go workers go
-     765                 :         15 :             canExec = false;
-     766                 :         15 :             (
-     767                 :            :                 bool hasJobs,
-     768                 :            :                 address[] memory autopayRecipients
-     769                 :         15 :             ) = getAutopayJobs(autopay_batch_size, auction_number - 1);
-     770         [ +  + ]:         15 :             if (hasJobs) {
-     771                 :          5 :                 canExec = true;
-     772                 :          5 :                 execPayload = abi.encodeWithSelector(
-     773                 :            :                     this.processAutopayJobs.selector,
-     774                 :            :                     autopayRecipients
-     775                 :            :                 );
-     776                 :          5 :                 return (canExec, execPayload);
-     777                 :            :             }
-     778                 :         10 :         return (false, "");
-     779                 :            :     }
-     780                 :            : 
-     781                 :            :     /// @notice Processes a list of addresses to transfer their outstanding balance
-     782                 :            :     /// @dev Genrally called by Ops with array length of autopay_batch_size
-     783                 :            :     /// @param autopayRecipients Array of recipents to consider for autopay
-     784                 :            :     function processAutopayJobs(address[] calldata autopayRecipients) external nonReentrant onlyOwnerStarterOps {
-     785                 :            :         // Reassert checks if insane spike between gelato trigger and tx picked up
-     786         [ #  + ]:          5 :         if (_offchain_checker_disabled || paused) revert PermissionPaused();
-     787         [ +  + ]:          5 :         if (tx.gasprice > max_gas_price) revert TimeGasNotSuitable();
-     788                 :            : 
-     789                 :          4 :         uint length = autopayRecipients.length;
-     790                 :          4 :         for (uint i = 0;i < length;) {
-     791         [ #  + ]:          8 :             if (autopayRecipients[i] != address(0)) {
-     792                 :          5 :                 _redeemOutstanding(autopayRecipients[i]);
-     793                 :            :             }
-     794                 :          8 :             unchecked { ++i; }
-     795                 :            :         }
-     796                 :            :     }
-     797                 :            : 
-     798                 :            :     /***********************************|
-     799                 :            :     |             Views                 |
-     800                 :            :     |__________________________________*/
-     801                 :            : 
-     802                 :            :     /// @notice Returns if there is autopays to be done for given `_auction_index`
-     803                 :            :     /// @dev  Most likely called off chain by Gelato
-     804                 :            :     /// @param _batch_size Max recipients to return
-     805                 :            :     /// @param _auction_index Auction round
-     806                 :            :     /// @return hasJobs If there was jobs found to be done by ops
-     807                 :            :     /// @return autopayRecipients List of addresses eligible to be paid
-     808                 :            :     function getAutopayJobs(uint16 _batch_size, uint128 _auction_index) public view returns (bool hasJobs, address[] memory autopayRecipients) {
-     809                 :         22 :         autopayRecipients = new address[](_batch_size); // Filled with 0x0
-     810                 :            :         // An active validator means a bid happened so potentially balances were moved to outstanding while the bid happened
-     811                 :         22 :         EnumerableSet.AddressSet storage prevRoundAddrSet = validatorsactiveAtAuctionRound[_auction_index];
-     812                 :         22 :         uint16 assigned = 0;
-     813                 :         22 :         uint256 len = prevRoundAddrSet.length();
-     814                 :         22 :         for (uint256 i = 0; i < len; i++) {
-     815                 :         32 :             address current_validator = prevRoundAddrSet.at(i);
-     816                 :         32 :             ValidatorBalanceCheckpoint memory valCheckpoint = validatorsCheckpoints[current_validator];
-     817                 :         32 :             uint256 minAmountForValidator = minAutoShipThreshold >= validatorsPreferences[current_validator].minAutoshipAmount ? minAutoShipThreshold : validatorsPreferences[current_validator].minAutoshipAmount;
-     818         [ #  + ]:         32 :             if (_checkRedeemableOutstanding(valCheckpoint, minAmountForValidator)) {
-     819                 :         11 :                 autopayRecipients[assigned] = current_validator;
-     820                 :         11 :                 ++assigned;
-     821                 :            :             }
-     822         [ +  + ]:         32 :             if (assigned >= _batch_size) {
-     823                 :          2 :                 break;
-     824                 :            :             }
-     825                 :            :         }
-     826                 :         22 :         hasJobs = assigned > 0;
-     827                 :            :     }
-     828                 :            : 
-     829                 :            :     /// @notice Gets the status of an address
-     830                 :            :     /// @dev Contains (activeAtAuctionRound, inactiveAtAuctionRound, statusType)
-     831                 :            :     /// @param _who Address we want the status of
-     832                 :            :     /// @return Status Status of the given address
-     833                 :            :     function getStatus(address _who) external view returns (Status memory) {
-     834                 :          2 :         return statusMap[_who];
-     835                 :            :     }
-     836                 :            : 
-     837                 :            :     /// @notice Gets the validators involved with a given auction
-     838                 :            :     /// @dev validatorsactiveAtAuctionRound being an EnumerableSet
-     839                 :            :     /// @param _auction_index Auction Round
-     840                 :            :     /// @return Array of validator addresses that received a bid during round `_auction_index`
-     841                 :            :     function getValidatorsactiveAtAuctionRound(uint128 _auction_index) external view returns (address[] memory) {
-     842                 :          3 :         return validatorsactiveAtAuctionRound[_auction_index].values();
-     843                 :            :     }
-     844                 :            : 
-     845                 :            : 
-     846                 :            :     /// @notice Gets the auction number for which the fast lane privileges are active
-     847                 :            :     /// @return auction round
-     848                 :            :     function getActivePrivilegesAuctionNumber() public view returns (uint128) {
-     849                 :          3 :         return auction_number - 1;
-     850                 :            :     }
-     851                 :            : 
-     852                 :            :     /// @notice Gets the checkpoint of an address
-     853                 :            :     /// @param _who Address we want the checkpoint of
-     854                 :            :     /// @return Validator checkpoint
-     855                 :            :     function getCheckpoint(address _who) external view returns (ValidatorBalanceCheckpoint memory) {
-     856                 :         13 :         return validatorsCheckpoints[_who];
-     857                 :            :     }
-     858                 :            :  
-     859                 :            :     /// @notice Gets the preferences of an address
-     860                 :            :     /// @param _who Address we want the preferences of
-     861                 :            :     /// @return Validator preferences
-     862                 :            :     function getPreferences(address _who) external view returns (ValidatorPreferences memory) {
-     863                 :          1 :         return validatorsPreferences[_who];
-     864                 :            :     }
-     865                 :            : 
-     866                 :            :     /// @notice Determines the current top bid of a pair for the current ongoing (live) auction
-     867                 :            :     /// @param _validatorAddress Validator for the given pair
-     868                 :            :     /// @param _opportunityAddress Opportunity for the given pair
-     869                 :            :     /// @return Tuple (bidAmount, auction_round)
-     870                 :            :     function findLiveAuctionTopBid(address _validatorAddress, address _opportunityAddress)
-     871                 :            :         external
-     872                 :            :         view
-     873                 :            :         atLiveStage
-     874                 :            :         returns (uint256, uint128)
-     875                 :            :     {
-     876                 :          2 :             Bid memory topBid = auctionsMap[auction_number][
-     877                 :            :                 _validatorAddress
-     878                 :            :             ][_opportunityAddress];
-     879                 :          2 :             return (topBid.bidAmount, auction_number);
-     880                 :            :     }
-     881                 :            : 
-     882                 :            :     /// @notice Returns the top bid of a past auction round for a given pair
-     883                 :            :     /// @param _auction_index Auction round
-     884                 :            :     /// @param _validatorAddress Validator for the given pair
-     885                 :            :     /// @param _opportunityAddress Opportunity for the given pair
-     886                 :            :     /// @return Tuple (true|false, winningSearcher, auction_index)
-     887                 :            :     function findFinalizedAuctionWinnerAtAuction(
-     888                 :            :         uint128 _auction_index,
-     889                 :            :         address _validatorAddress,
-     890                 :            :         address _opportunityAddress
-     891                 :            :     ) public view
-     892                 :            :                 returns (
-     893                 :            :             bool,
-     894                 :            :             address,
-     895                 :            :             uint128
-     896                 :            :         )
-     897                 :            :     {
-     898         [ #  + ]:          3 :         if (_auction_index >= auction_number) revert InequalityInvalidIndex();
-     899                 :            :         // Get the winning searcher
-     900                 :          3 :         address winningSearcher = auctionsMap[_auction_index][
-     901                 :            :             _validatorAddress
-     902                 :            :         ][_opportunityAddress].searcherContractAddress;
-     903                 :            : 
-     904                 :            :         // Check if there is a winning searcher (no bids mean the winner is address(0))
-     905         [ +  + ]:          3 :         if (winningSearcher != address(0)) {
-     906                 :          2 :             return (true, winningSearcher, _auction_index);
-     907                 :            :         } else {
-     908                 :          1 :             return (false, winningSearcher, _auction_index);
-     909                 :            :         }
-     910                 :            :     }
-     911                 :            : 
-     912                 :            :     /// @notice Returns the the winner of the last completed auction for a given pair
-     913                 :            :     /// @param _validatorAddress Validator for the given pair
-     914                 :            :     /// @param _opportunityAddress Opportunity for the given pair
-     915                 :            :     /// @return Tuple (true|false, winningSearcher, auction_index)
-     916                 :            :     function findLastFinalizedAuctionWinner(
-     917                 :            :         address _validatorAddress,
-     918                 :            :         address _opportunityAddress
-     919                 :            :     )
-     920                 :            :         external
-     921                 :            :         view
-     922                 :            :         returns (
-     923                 :            :             bool,
-     924                 :            :             address,
-     925                 :            :             uint128
-     926                 :            :         )
-     927                 :            :     {
-     928                 :          1 :         return findFinalizedAuctionWinnerAtAuction(getActivePrivilegesAuctionNumber(), _validatorAddress, _opportunityAddress);
-     929                 :            :     }
-     930                 :            : 
-     931                 :            :   /***********************************|
-     932                 :            :   |             Modifiers             |
-     933                 :            :   |__________________________________*/
-     934                 :            : 
-     935                 :            :     modifier notLiveStage() {
-     936                 :            :         if (auction_live) revert TimeNotWhenAuctionIsLive();
-     937                 :            :         _;
-     938                 :            :     }
-     939                 :            : 
-     940                 :            :     modifier atLiveStage() {
-     941                 :            :         if (!auction_live) revert TimeNotWhenAuctionIsStopped();
-     942                 :            :         _;
-     943                 :            :     }
-     944                 :            : 
-     945                 :            :     modifier whenNotPaused() {
-     946                 :            :         if (paused) revert PermissionPaused();
-     947                 :            :         _;
-     948                 :            :     }
-     949                 :            : 
-     950                 :            :     modifier onlyValidator() {
-     951                 :            :         if(statusMap[msg.sender].kind != statusType.VALIDATOR) revert PermissionMustBeValidator();
-     952                 :            :         _;
-     953                 :            :     }
-     954                 :            : 
-     955                 :            :     modifier onlyOwnerStarterOps() {
-     956                 :            :         if (msg.sender != ops && msg.sender != auctionStarter && msg.sender != owner()) revert PermissionOnlyOps();
-     957                 :            :         _;
-     958                 :            :     }
-     959                 :            : 
-     960                 :            :     modifier onlyStarterOrOwner() {
-     961                 :            :         if (msg.sender != auctionStarter && msg.sender != owner()) revert PermissionNotOwnerNorStarter();
-     962                 :            :         _;
-     963                 :            :     }
-     964                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/FastLaneFactory.sol.func-sort-c.html b/report/contracts/FastLaneFactory.sol.func-sort-c.html deleted file mode 100644 index 7a7b0ea..0000000 --- a/report/contracts/FastLaneFactory.sol.func-sort-c.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/FastLaneFactory.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts - FastLaneFactory.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0110.0 %
Date:2023-09-07 01:01:29Functions:030.0 %
Branches:060.0 %
-
- -
- - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
FastLaneFactory._createFastLane0
FastLaneFactory.getArgs0
FastLaneFactory.getFastLaneContractBySalt0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/FastLaneFactory.sol.func.html b/report/contracts/FastLaneFactory.sol.func.html deleted file mode 100644 index 1f7c194..0000000 --- a/report/contracts/FastLaneFactory.sol.func.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/FastLaneFactory.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts - FastLaneFactory.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0110.0 %
Date:2023-09-07 01:01:29Functions:030.0 %
Branches:060.0 %
-
- -
- - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
FastLaneFactory._createFastLane0
FastLaneFactory.getArgs0
FastLaneFactory.getFastLaneContractBySalt0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/FastLaneFactory.sol.gcov.html b/report/contracts/FastLaneFactory.sol.gcov.html deleted file mode 100644 index cf75fb6..0000000 --- a/report/contracts/FastLaneFactory.sol.gcov.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/FastLaneFactory.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts - FastLaneFactory.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0110.0 %
Date:2023-09-07 01:01:29Functions:030.0 %
Branches:060.0 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : //SPDX-License-Identifier: Unlicensed
-       2                 :            : pragma solidity 0.8.16;
-       3                 :            : 
-       4                 :            : import {FastLaneLegacyAuction} from "./legacy/FastLaneLegacyAuction.sol";
-       5                 :            : 
-       6                 :            : 
-       7                 :            : contract FastLaneFactory {
-       8                 :            : 
-       9                 :            :     address public fastlane;
-      10                 :            : 
-      11                 :            :     mapping(uint256 => address) public gelatoOpsAddresses;
-      12                 :            :     mapping(uint256 => address) public wrappedNativeAddresses;
-      13                 :            : 
-      14                 :            :     // Todo: Remove Unused
-      15                 :            :     bytes32 private constant INIT_CODEHASH = keccak256(type(FastLaneLegacyAuction).creationCode);
-      16                 :            : 
-      17                 :            :     event FastLaneCreated(address fastlaneContract);
-      18                 :            : 
-      19                 :            :     function _createFastLane(bytes32 _salt, address _initial_bid_token, address _ops) internal {
-      20                 :            :         
-      21                 :            :         // use CREATE2 so we can get a deterministic address based on the salt
-      22                 :          0 :         fastlane = address(new FastLaneLegacyAuction{salt: _salt}(msg.sender));
-      23                 :            : 
-      24                 :            :         // CREATE2 can return address(0), add a check to verify this isn't the case
-      25                 :            :         // See: https://eips.ethereum.org/EIPS/eip-1014
-      26         [ #  # ]:          0 :         require(fastlane != address(0), "Wrong init");
-      27                 :          0 :         emit FastLaneCreated(fastlane);
-      28                 :            : 
-      29                 :          0 :         FastLaneLegacyAuction(fastlane).initialSetupAuction(_initial_bid_token, _ops, msg.sender);
-      30                 :            : 
-      31                 :            :     }
-      32                 :            : 
-      33                 :            :     function getArgs() public view returns (address initial_bid_token, address ops) {
-      34                 :          0 :         ops = gelatoOpsAddresses[block.chainid];
-      35                 :          0 :         initial_bid_token = wrappedNativeAddresses[block.chainid];
-      36                 :            :     }
-      37                 :            : 
-      38                 :            :     constructor(bytes32 _salt) {
-      39                 :            :         gelatoOpsAddresses[1] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F;
-      40                 :            :         gelatoOpsAddresses[137] = 0x527a819db1eb0e34426297b03bae11F2f8B3A19E;
-      41                 :            :         gelatoOpsAddresses[80001] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F;
-      42                 :            :         gelatoOpsAddresses[31337] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F;
-      43                 :            : 
-      44                 :            :         wrappedNativeAddresses[1] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
-      45                 :            :         wrappedNativeAddresses[137] = 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270;
-      46                 :            :         wrappedNativeAddresses[80001] = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889;
-      47                 :            :         wrappedNativeAddresses[31337] = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889;
-      48                 :            : 
-      49                 :            :         (address initial_bid_token, address ops) = getArgs();
-      50                 :            : 
-      51                 :            :         require(ops != address(0), "O(o)ps");
-      52                 :            :         require(initial_bid_token != address(0), "Wrapped");
-      53                 :            : 
-      54                 :            :         _createFastLane(_salt, initial_bid_token, ops);
-      55                 :            :     }
-      56                 :            : 
-      57                 :            :     function getFastLaneContractBySalt(bytes32 _salt) external view returns(address predictedAddress, bool isDeployed){
-      58                 :            :         
-      59                 :          0 :         (address initial_bid_token, address ops) = getArgs();
-      60                 :            : 
-      61         [ #  # ]:          0 :         require(ops != address(0), "O(o)ps");
-      62         [ #  # ]:          0 :         require(initial_bid_token != address(0), "Wrapped");
-      63                 :            : 
-      64                 :          0 :         predictedAddress = address(uint160(uint256(keccak256(abi.encodePacked(
-      65                 :            :             bytes1(0xff),
-      66                 :            :             address(this),
-      67                 :            :             _salt,
-      68                 :            :             keccak256(abi.encodePacked(
-      69                 :            :                 type(FastLaneLegacyAuction).creationCode
-      70                 :            :             )
-      71                 :            :         ))))));
-      72                 :          0 :         isDeployed = predictedAddress.code.length != 0;
-      73                 :            :     }
-      74                 :            : 
-      75                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/auction-handler/FastLaneAuctionHandler.sol.func-sort-c.html b/report/contracts/auction-handler/FastLaneAuctionHandler.sol.func-sort-c.html deleted file mode 100644 index 683b645..0000000 --- a/report/contracts/auction-handler/FastLaneAuctionHandler.sol.func-sort-c.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/auction-handler/FastLaneAuctionHandler.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/auction-handler - FastLaneAuctionHandler.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:9913076.2 %
Date:2023-09-07 01:01:29Functions:232688.5 %
Branches:456668.2 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
FastLaneAuctionHandler.0
FastLaneAuctionHandler._handleBalancesFast0
FastLaneAuctionHandler._validateValidator0
FastLaneAuctionHandler.fastBidWrapper1
FastLaneAuctionHandler.submitFastBid1
FastLaneAuctionHandler._handleBalancesWithRefundAndEmit2
FastLaneAuctionHandler.getValidatorBlockOfLastWithdraw2
FastLaneAuctionHandler.isValidPayee2
FastLaneAuctionHandler.payValidatorCustom2
FastLaneAuctionHandler.simulateFlashBid2
FastLaneAuctionHandler.updateValidatorRefundShare2
FastLaneAuctionHandler.isPayeeTimeLocked3
FastLaneAuctionHandler.syncStuckNativeToken3
FastLaneAuctionHandler.withdrawStuckERC203
FastLaneAuctionHandler.clearValidatorPayee4
FastLaneAuctionHandler.getValidatorBalance5
FastLaneAuctionHandler._handleBalances6
FastLaneAuctionHandler.getValidatorPayee8
FastLaneAuctionHandler.submitFlashBidWithRefund8
FastLaneAuctionHandler.collectFees9
FastLaneAuctionHandler.getValidatorRecipient12
FastLaneAuctionHandler.validatorPayee16
FastLaneAuctionHandler.submitFlashBid17
FastLaneAuctionHandler.payValidatorFee19
FastLaneAuctionHandler.updateValidatorPayee27
FastLaneAuctionHandler.getValidator31
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/auction-handler/FastLaneAuctionHandler.sol.func.html b/report/contracts/auction-handler/FastLaneAuctionHandler.sol.func.html deleted file mode 100644 index 7f1f11a..0000000 --- a/report/contracts/auction-handler/FastLaneAuctionHandler.sol.func.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/auction-handler/FastLaneAuctionHandler.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/auction-handler - FastLaneAuctionHandler.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:9913076.2 %
Date:2023-09-07 01:01:29Functions:232688.5 %
Branches:456668.2 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
FastLaneAuctionHandler.0
FastLaneAuctionHandler._handleBalances6
FastLaneAuctionHandler._handleBalancesFast0
FastLaneAuctionHandler._handleBalancesWithRefundAndEmit2
FastLaneAuctionHandler._validateValidator0
FastLaneAuctionHandler.clearValidatorPayee4
FastLaneAuctionHandler.collectFees9
FastLaneAuctionHandler.fastBidWrapper1
FastLaneAuctionHandler.getValidator31
FastLaneAuctionHandler.getValidatorBalance5
FastLaneAuctionHandler.getValidatorBlockOfLastWithdraw2
FastLaneAuctionHandler.getValidatorPayee8
FastLaneAuctionHandler.getValidatorRecipient12
FastLaneAuctionHandler.isPayeeTimeLocked3
FastLaneAuctionHandler.isValidPayee2
FastLaneAuctionHandler.payValidatorCustom2
FastLaneAuctionHandler.payValidatorFee19
FastLaneAuctionHandler.simulateFlashBid2
FastLaneAuctionHandler.submitFastBid1
FastLaneAuctionHandler.submitFlashBid17
FastLaneAuctionHandler.submitFlashBidWithRefund8
FastLaneAuctionHandler.syncStuckNativeToken3
FastLaneAuctionHandler.updateValidatorPayee27
FastLaneAuctionHandler.updateValidatorRefundShare2
FastLaneAuctionHandler.validatorPayee16
FastLaneAuctionHandler.withdrawStuckERC203
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/auction-handler/FastLaneAuctionHandler.sol.gcov.html b/report/contracts/auction-handler/FastLaneAuctionHandler.sol.gcov.html deleted file mode 100644 index b2b40ba..0000000 --- a/report/contracts/auction-handler/FastLaneAuctionHandler.sol.gcov.html +++ /dev/null @@ -1,817 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/auction-handler/FastLaneAuctionHandler.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/auction-handler - FastLaneAuctionHandler.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:9913076.2 %
Date:2023-09-07 01:01:29Functions:232688.5 %
Branches:456668.2 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : //SPDX-License-Identifier: Unlicensed
-       2                 :            : pragma solidity ^0.8.16;
-       3                 :            : 
-       4                 :            : import { SafeTransferLib, ERC20 } from "solmate/utils/SafeTransferLib.sol";
-       5                 :            : import { ReentrancyGuard } from "solmate/utils/ReentrancyGuard.sol";
-       6                 :            : 
-       7                 :            : import { IPaymentProcessor } from "../interfaces/IPaymentProcessor.sol";
-       8                 :            : 
-       9                 :            : 
-      10                 :            : abstract contract FastLaneAuctionHandlerEvents {
-      11                 :            : 
-      12                 :            :     event RelayValidatorPayeeUpdated(address validator, address payee, address indexed initiator);
-      13                 :            : 
-      14                 :            :     event RelayFlashBid(address indexed sender, bytes32 indexed oppTxHash, address indexed validator, uint256 bidAmount, uint256 amountPaid, address searcherContractAddress);
-      15                 :            :     event RelayFlashBidWithRefund(address indexed sender, bytes32 indexed oppTxHash, address indexed validator, uint256 bidAmount, uint256 amountPaid, address searcherContractAddress, uint256 refundedAmount, address refundAddress);
-      16                 :            :     event RelayFastBid(address indexed sender, address indexed validator, bool success, uint256 bidAmount, address searcherContractAddress);
-      17                 :            :     event RelaySimulatedFlashBid(address indexed sender, uint256 amount, bytes32 indexed oppTxHash, address indexed validator, address searcherContractAddress);
-      18                 :            : 
-      19                 :            :     event RelayWithdrawStuckERC20(
-      20                 :            :         address indexed receiver,
-      21                 :            :         address indexed token,
-      22                 :            :         uint256 amount
-      23                 :            :     );
-      24                 :            :     event RelayWithdrawStuckNativeToken(address indexed receiver, uint256 amount);
-      25                 :            :     
-      26                 :            :     event RelayProcessingPaidValidator(address indexed validator, uint256 validatorPayment, address indexed initiator);
-      27                 :            : 
-      28                 :            :     event RelayFeeCollected(address indexed payor, address indexed payee, uint256 amount);
-      29                 :            : 
-      30                 :            :     event CustomPaymentProcessorPaid(address indexed payor, address indexed paymentProcessor, uint256 totalAmount, uint256 customAllocation, uint256 startBlock, uint256 endBlock);
-      31                 :            : 
-      32                 :            :     // NOTE: Investigated Validators should be presumed innocent.  This event can be triggered inadvertently by honest validators
-      33                 :            :     // while building a block due to transaction nonces taking precedence over gasPrice.
-      34                 :            :     event RelayInvestigateOutcome(address indexed validator, address indexed sender, uint256 blockNumber, uint256 existingBidAmount, uint256 newBidAmount, uint256 existingGasPrice, uint256 newGasPrice);
-      35                 :            : 
-      36                 :            :     error RelayPermissionSenderNotOrigin();                                 // 0x5c8a268a
-      37                 :            : 
-      38                 :            :     error RelaySearcherWrongParams();                                       // 0x31ae2a9d
-      39                 :            : 
-      40                 :            :     // error RelaySearcherCallFailure(bytes retData);                       // 0x291bc14c /!\ Deprecated in favor of bubbling up
-      41                 :            :     error RelayValueIsZero();                                               // 0x7da21207
-      42                 :            :     // error RelaySimulatedSearcherCallFailure(bytes retData);              // 0x5be08ca5 /!\ Deprecated in favor of bubbling up
-      43                 :            :     error RelayNotRepaid(uint256 bidAmount, uint256 actualAmount);          // 0x53dc88d9
-      44                 :            :     error RelaySimulatedNotRepaid(uint256 bidAmount, uint256 actualAmount); // 0xd47ae88a
-      45                 :            : 
-      46                 :            :     error RelayAuctionInvalidBid();                                         // 0xa51c0e05
-      47                 :            :     error RelayAuctionBidReceivedLate();                                    // 0xb61e767e
-      48                 :            :     error RelayAuctionSearcherNotWinner(uint256 current, uint256 existing); // 0x5db6f7d9
-      49                 :            : 
-      50                 :            :     error RelayCannotBeZero();                                              // 0x3c9cfe50
-      51                 :            :     error RelayCannotBeSelf();                                              // 0x6a64f641
-      52                 :            :     error RelayMustBeSelf();                                                // 0x3ee08eb4
-      53                 :            : 
-      54                 :            :     error RelayValidatorNotAcceptingRefundBids();                           // 0x8b2dbdac
-      55                 :            :     error RelayProcessorCannotBeZero();                                     // 0x779f4778
-      56                 :            :     error RelayNotActiveValidator();                                        // 0x68a251a0
-      57                 :            :     error RelayPayeeIsTimelocked();                                         // 0x9ec568f3
-      58                 :            :     error RelayInvalidSender();                                             // 0x3e82c9f4
-      59                 :            :     error RelayImmutableBlockAuthorRate();                                  // 0xe9271574
-      60                 :            : 
-      61                 :            :     error RelayPayeeUpdateInvalid();                                        // 0x561d7b2d
-      62                 :            : }
-      63                 :            : 
-      64                 :            : /// @notice Validator Data Struct
-      65                 :            : /// @dev Subject to BLOCK_TIMELOCK for changes
-      66                 :            : /// @param payee Who to pay for this validator
-      67                 :            : /// @param timeUpdated Last time a change was requested for this validator payee
-      68                 :            : /// @param blockOfLastWithdrawal Last time a withdrawal was initiated
-      69                 :            : struct ValidatorData {
-      70                 :            :     address payee;
-      71                 :            :     uint256 timeUpdated;
-      72                 :            :     uint256 blockOfLastWithdraw;
-      73                 :            : }
-      74                 :            : 
-      75                 :            : struct PGAData {
-      76                 :            :     uint64 lowestGasPrice;
-      77                 :            :     uint64 lowestFastPrice;
-      78                 :            :     uint64 lowestTotalPrice;
-      79                 :            : }
-      80                 :            : 
-      81                 :            : interface ISearcherContract {
-      82                 :            :     function fastLaneCall(address, uint256, bytes calldata) external payable returns (bool, bytes memory);
-      83                 :            : }
-      84                 :            : 
-      85                 :            : contract FastLaneAuctionHandler is FastLaneAuctionHandlerEvents, ReentrancyGuard {
-      86                 :            : 
-      87                 :            :     /// @notice Constant delay before the stake share can be changed
-      88                 :            :     uint32 internal constant BLOCK_TIMELOCK = 6 days;
-      89                 :            : 
-      90                 :            :     uint256 internal constant MIN_GAS_SPENT_PGA = 100_000;
-      91                 :            :     uint256 internal constant REFUND_GAS_SPENT = 2_500; // TODO: This is wrong - add in call cost & verify. 
-      92                 :            : 
-      93                 :            :     /// @notice The scale for validator refund share
-      94                 :            :     uint256 internal constant VALIDATOR_REFUND_SCALE = 10_000; // 1 = 0.01%
-      95                 :            : 
-      96                 :            :     /// @notice Mapping to Validator Data Struct
-      97                 :            :     mapping(address => ValidatorData) internal validatorsDataMap;
-      98                 :            : 
-      99                 :            :     /// @notice Mapping payee address to validator address
-     100                 :            :     mapping(address => address) public payeeMap;
-     101                 :            : 
-     102                 :            :     /// @notice Map[validator] = balance
-     103                 :            :     mapping(address => uint256) public validatorsBalanceMap;
-     104                 :            : 
-     105                 :            :     /// @notice Map key is keccak hash of opp tx's gasprice and tx hash
-     106                 :            :     mapping(bytes32 => uint256) public fulfilledAuctionsMap;
-     107                 :            : 
-     108                 :            :     /// @notice Map key is block.number
-     109                 :            :     mapping(uint256 => PGAData) public fulfilledPGAMap;
-     110                 :            : 
-     111                 :            :     /// @notice Map[validator] = % payment to validator in a bid with refund
-     112                 :            :     mapping(address => uint256) public validatorsRefundShareMap;
-     113                 :            : 
-     114                 :            :     uint256 public validatorsTotal;
-     115                 :            : 
-     116                 :            : 
-     117                 :            :     /// @notice Submits a flash bid
-     118                 :            :     /// @dev Will revert if: already won, minimum bid not respected, or not from EOA
-     119                 :            :     /// @param bidAmount Amount committed to be repaid
-     120                 :            :     /// @param oppTxHash Target Transaction hash
-     121                 :            :     /// @param searcherToAddress Searcher contract address to be called on its `fastLaneCall` function.
-     122                 :            :     /// @param searcherCallData callData to be passed to `_searcherToAddress.fastLaneCall(_bidAmount,msg.sender,callData)`
-     123                 :            :     function submitFlashBid(
-     124                 :            :         uint256 bidAmount, // Value commited to be repaid at the end of execution
-     125                 :            :         bytes32 oppTxHash, // Target TX
-     126                 :            :         address searcherToAddress,
-     127                 :            :         bytes calldata searcherCallData 
-     128                 :            :     ) external payable checkBid(oppTxHash, bidAmount) onlyEOA nonReentrant {
-     129                 :            : 
-     130         [ +  + ]:         15 :             if (searcherToAddress == address(0)) revert RelaySearcherWrongParams();
-     131                 :            :             
-     132                 :            :             // Store the current balance, excluding msg.value
-     133                 :         14 :             uint256 balanceBefore = address(this).balance - msg.value;
-     134                 :            : 
-     135                 :            :             {
-     136                 :            :             // Call the searcher's contract (see searcher_contract.sol for example of call receiver)
-     137                 :            :             // And forward msg.value
-     138                 :         14 :             (bool success, bytes memory retData) = ISearcherContract(searcherToAddress).fastLaneCall{value: msg.value}(
-     139                 :            :                         msg.sender,
-     140                 :            :                         bidAmount,
-     141                 :            :                         searcherCallData
-     142                 :            :             );
-     143                 :            : 
-     144         [ +  + ]:          8 :             if (!success) {
-     145                 :            :                     assembly {
-     146                 :            :                         revert(
-     147                 :            :                             // Start of revert data bytes. The 0x20 offset is always the same.
-     148                 :            :                             add(retData, 0x20),
-     149                 :            :                             // Length of revert data.
-     150                 :            :                             mload(retData)
-     151                 :            :                         )
-     152                 :            :                     }
-     153                 :            :                 }
-     154                 :            :             }
-     155                 :            : 
-     156                 :            :             // Verify that the searcher paid the amount they bid & emit the event
-     157                 :          6 :             uint256 amountPaid = _handleBalances(bidAmount, balanceBefore);
-     158                 :            : 
-     159                 :          4 :             emit RelayFlashBid(msg.sender, oppTxHash, block.coinbase, bidAmount, amountPaid, searcherToAddress);
-     160                 :            :     }
-     161                 :            : 
-     162                 :            :     /// @notice Submits a flash bid which refunds a portion of payment to `refundAddress`
-     163                 :            :     /// @dev Will revert if: already won, minimum bid not respected, or not from EOA
-     164                 :            :     /// @param bidAmount Amount committed to be repaid
-     165                 :            :     /// @param oppTxHash Target Transaction hash
-     166                 :            :     /// @param searcherToAddress Searcher contract address to be called on its `fastLaneCall` function.
-     167                 :            :     /// @param searcherCallData callData to be passed to `searcherToAddress.fastLaneCall(_bidAmount,msg.sender,callData)`
-     168                 :            :     /// @param refundAddress The address that will receive the refund
-     169                 :            :     function submitFlashBidWithRefund(
-     170                 :            :         uint256 bidAmount, // Value commited to be repaid at the end of execution
-     171                 :            :         bytes32 oppTxHash, // Target TX
-     172                 :            :         address refundAddress,
-     173                 :            :         address searcherToAddress,
-     174                 :            :         bytes memory searcherCallData
-     175                 :            :     ) external payable checkBid(oppTxHash, bidAmount) onlyEOA nonReentrant {
-     176                 :            :             
-     177         [ +  + ]:          6 :             if (searcherToAddress == address(0)) revert RelaySearcherWrongParams();
-     178         [ #  + ]:          5 :             if (validatorsRefundShareMap[block.coinbase] > VALIDATOR_REFUND_SCALE) revert RelayValidatorNotAcceptingRefundBids();
-     179                 :            : 
-     180                 :            :             // Call the searcher's contract (see searcher_contract.sol for example of call receiver)
-     181                 :            :             // And forward msg.value
-     182                 :            :             // Store the current balance, excluding msg.value
-     183                 :          5 :             uint256 balanceBefore = address(this).balance - msg.value;
-     184                 :            : 
-     185                 :            :             {
-     186                 :          5 :             (bool success, bytes memory retData) = ISearcherContract(searcherToAddress).fastLaneCall{value: msg.value}(
-     187                 :            :                         msg.sender,
-     188                 :            :                         bidAmount,
-     189                 :            :                         searcherCallData
-     190                 :            :             );
-     191         [ #  + ]:          2 :             if (!success) {
-     192                 :            :                     assembly {
-     193                 :            :                         revert(
-     194                 :            :                             // Start of revert data bytes. The 0x20 offset is always the same.
-     195                 :            :                             add(retData, 0x20),
-     196                 :            :                             // Length of revert data.
-     197                 :            :                             mload(retData)
-     198                 :            :                         )
-     199                 :            :                     }
-     200                 :            :                 }
-     201                 :            :             }
-     202                 :            : 
-     203                 :            :             // Verify that the searcher paid the amount they bid & emit the event
-     204                 :          2 :             _handleBalancesWithRefundAndEmit(bidAmount, balanceBefore, refundAddress, oppTxHash, searcherToAddress);
-     205                 :            :     }
-     206                 :            : 
-     207                 :            :     /// @notice Submits a fast bid
-     208                 :            :     /// @dev Will not revert
-     209                 :            :     /// @param fastGasPrice Bonus gasPrice rate that Searcher commits to pay to validator for gas used by searcher's call
-     210                 :            :     /// @param searcherToAddress Searcher contract address to be called on its `fastLaneCall` function.
-     211                 :            :     /// @param searcherCallData callData to be passed to `_searcherToAddress.fastLaneCall(fastPrice,msg.sender,callData)`
-     212                 :            :     function submitFastBid(
-     213                 :            :         uint256 fastGasPrice, // Value commited to be paid at the end of execution
-     214                 :            :         address searcherToAddress,
-     215                 :            :         bytes calldata searcherCallData 
-     216                 :            :     ) external payable checkPGA(fastGasPrice) onlyEOA nonReentrant {
-     217                 :            : 
-     218         [ #  # ]:          0 :         if (searcherToAddress == address(this) || searcherToAddress == msg.sender) revert RelaySearcherWrongParams();
-     219                 :            : 
-     220                 :            :         // Use a try/catch pattern so that tx.gasprice and bidAmount can be saved to verify that
-     221                 :            :         // proper transaction ordering is being followed. 
-     222                 :          0 :         try this.fastBidWrapper{value: msg.value}(
-     223                 :            :             msg.sender, fastGasPrice, searcherToAddress, searcherCallData
-     224                 :            :         ) returns (uint256 bidAmount) {
-     225                 :            :             emit RelayFastBid(msg.sender, block.coinbase, true, bidAmount, searcherToAddress);
-     226                 :            :         } catch {
-     227                 :            :             // TODO: Catch specific errors - remove custom errors first before coding. 
-     228                 :            :             emit RelayFastBid(msg.sender, block.coinbase, false, 0, searcherToAddress);
-     229                 :            :         }
-     230                 :            :     }
-     231                 :            : 
-     232                 :            :     /// @notice Pays a validator their fee via a custom payment processor
-     233                 :            :     function payValidatorCustom(address paymentProcessor, uint256 customAllocation, bytes calldata data) external payable nonReentrant {
-     234         [ +  + ]:          2 :         if (paymentProcessor == address(0)) revert RelayProcessorCannotBeZero();
-     235                 :            :         // TODO: Enforce the customAllocation scale? 1e18?
-     236                 :            :         
-     237                 :          1 :         uint256 blockOfLastWithdrawal = validatorsDataMap[getValidator()].blockOfLastWithdraw;
-     238                 :            : 
-     239                 :          1 :         IPaymentProcessor(paymentProcessor).payValidator{value: msg.value}({
-     240                 :            :             startBlock: blockOfLastWithdrawal,
-     241                 :            :             endBlock: block.number,
-     242                 :            :             totalAmount: msg.value,
-     243                 :            :             customAllocation: customAllocation,
-     244                 :            :             data: data
-     245                 :            :         });
-     246                 :            : 
-     247                 :          1 :         emit CustomPaymentProcessorPaid({
-     248                 :            :             payor: msg.sender,
-     249                 :            :             paymentProcessor: paymentProcessor,
-     250                 :            :             totalAmount: msg.value,
-     251                 :            :             customAllocation: customAllocation, 
-     252                 :            :             startBlock: blockOfLastWithdrawal,
-     253                 :            :             endBlock: block.number
-     254                 :            :         });
-     255                 :            :     }
-     256                 :            : 
-     257                 :            :     function fastBidWrapper(
-     258                 :            :         address msgSender,
-     259                 :            :         uint256 fastPrice, // Value commited to be paid at the end of execution
-     260                 :            :         address searcherToAddress,
-     261                 :            :         bytes calldata searcherCallData 
-     262                 :            :     ) external payable returns (uint256) {
-     263                 :            : 
-     264                 :            :         // This is meant to be called inside of a try/catch by address(this)
-     265         [ +  # ]:          1 :         if (msg.sender != address(this)) revert RelayMustBeSelf();
-     266                 :            : 
-     267                 :            :         // Store the current balance, excluding msg.value, and store the gas left
-     268                 :          0 :         uint256 balanceBefore = address(this).balance - msg.value;
-     269                 :          0 :         uint256 gasSpent = gasleft();
-     270                 :            : 
-     271                 :            :         {
-     272                 :            :         // Call the searcher's contract (see searcher_contract.sol for example of call receiver)
-     273                 :            :         // And forward msg.value
-     274                 :          0 :         (bool success, bytes memory retData) = ISearcherContract(searcherToAddress).fastLaneCall{value: msg.value}(
-     275                 :            :                     msgSender,
-     276                 :            :                     fastPrice,
-     277                 :            :                     searcherCallData
-     278                 :            :         );
-     279                 :            : 
-     280         [ #  # ]:          0 :         if (!success) {
-     281                 :            :                     assembly {
-     282                 :            :                         revert(
-     283                 :            :                             // Start of revert data bytes. The 0x20 offset is always the same.
-     284                 :            :                             add(retData, 0x20),
-     285                 :            :                             // Length of revert data.
-     286                 :            :                             mload(retData)
-     287                 :            :                         )
-     288                 :            :                     }
-     289                 :            :                 }
-     290                 :            :         }
-     291                 :            : 
-     292                 :            :         // Calculate how much gas was spent by searcher
-     293                 :          0 :         gasSpent -= gasleft();
-     294                 :            : 
-     295                 :            :         // Multiply the fastBidAmount (a rate) by the gas spent to get the total amount
-     296                 :          0 :         uint256 bidAmount = fastPrice * (gasSpent < MIN_GAS_SPENT_PGA ? MIN_GAS_SPENT_PGA : gasSpent);
-     297                 :            :         
-     298                 :          0 :         return _handleBalancesFast(bidAmount, balanceBefore, searcherToAddress);
-     299                 :            :     }
-     300                 :            : 
-     301                 :            :     function payValidatorFee(address _payor) external payable nonReentrant {
-     302         [ +  + ]:         19 :         if (msg.value == 0) revert RelayValueIsZero();
-     303                 :         18 :         validatorsBalanceMap[block.coinbase] += msg.value;
-     304                 :         18 :         validatorsTotal += msg.value;
-     305                 :         18 :         emit RelayFeeCollected(_payor, block.coinbase, msg.value);
-     306                 :            :     }
-     307                 :            : 
-     308                 :            :     /// @notice Submits a SIMULATED flash bid. THE HTTP RELAY won't accept calls for this function.
-     309                 :            :     /// @notice This is just a convenience function for you to test by simulating a call to simulateFlashBid 
-     310                 :            :     /// @notice To ensure your calldata correctly works when relayed to `_searcherToAddress`.fastLaneCall(_searcherCallData)
-     311                 :            :     /// @dev This does NOT check that current coinbase is participating in PFL.
-     312                 :            :     /// @dev Only use for testing _searcherCallData
-     313                 :            :     /// @dev You can submit any _bidAmount you like for testing
-     314                 :            :     /// @param bidAmount Amount committed to be repaid
-     315                 :            :     /// @param oppTxHash Target Transaction hash
-     316                 :            :     /// @param searcherToAddress Searcher contract address to be called on its `fastLaneCall` function.
-     317                 :            :     /// @param searcherCallData callData to be passed to `_searcherToAddress.fastLaneCall(_bidAmount,msg.sender,callData)`
-     318                 :            :     function simulateFlashBid(
-     319                 :            :         uint256 bidAmount, // Value commited to be repaid at the end of execution, can be set very low in simulated
-     320                 :            :         bytes32 oppTxHash, // Target TX
-     321                 :            :         address searcherToAddress,
-     322                 :            :         bytes calldata searcherCallData 
-     323                 :            :         ) external payable nonReentrant onlyEOA {
-     324                 :            : 
-     325                 :            :             // Relax check on min bid amount for simulated
-     326         [ +  + ]:          2 :             if (searcherToAddress == address(0)) revert RelaySearcherWrongParams();
-     327                 :            :             
-     328                 :            :             // Store the current balance, excluding msg.value
-     329                 :          1 :             uint256 balanceBefore = address(this).balance - msg.value;
-     330                 :            : 
-     331                 :            :             // Call the searcher's contract (see searcher_contract.sol for example of call receiver)
-     332                 :            :             // And forward msg.value
-     333                 :          1 :             (bool success, bytes memory retData) = ISearcherContract(searcherToAddress).fastLaneCall{value: msg.value}(
-     334                 :            :                         msg.sender,
-     335                 :            :                         bidAmount,
-     336                 :            :                         searcherCallData
-     337                 :            :             );
-     338                 :            : 
-     339         [ #  + ]:          1 :             if (!success) {
-     340                 :            :                     assembly {
-     341                 :            :                         revert(
-     342                 :            :                             // Start of revert data bytes. The 0x20 offset is always the same.
-     343                 :            :                             add(retData, 0x20),
-     344                 :            :                             // Length of revert data.
-     345                 :            :                             mload(retData)
-     346                 :            :                         )
-     347                 :            :                     }
-     348                 :            :                 }
-     349                 :            : 
-     350                 :            :             // Verify that the searcher paid the amount they bid & emit the event
-     351         [ #  + ]:          1 :             if (address(this).balance < balanceBefore + bidAmount) {
-     352                 :          0 :                 revert RelaySimulatedNotRepaid(bidAmount, address(this).balance - balanceBefore);
-     353                 :            :             }
-     354                 :          1 :             emit RelaySimulatedFlashBid(msg.sender, bidAmount, oppTxHash, block.coinbase, searcherToAddress);
-     355                 :            :     }
-     356                 :            : 
-     357                 :            :     /***********************************|
-     358                 :            :     |    Internal Bid Helper Functions  |
-     359                 :            :     |__________________________________*/
-     360                 :            : 
-     361                 :            :     function _handleBalances(uint256 _bidAmount, uint256 balanceBefore) internal returns (uint256) {
-     362         [ +  + ]:          6 :         if (address(this).balance < balanceBefore + _bidAmount) {
-     363                 :          2 :             revert RelayNotRepaid(_bidAmount, address(this).balance - balanceBefore);
-     364                 :            :         }
-     365                 :            : 
-     366         [ +  + ]:          4 :         if (address(this).balance - balanceBefore > _bidAmount) {
-     367                 :          1 :             _bidAmount = address(this).balance - balanceBefore;
-     368                 :            :         }
-     369                 :            : 
-     370                 :          4 :         validatorsBalanceMap[block.coinbase] += _bidAmount;
-     371                 :          4 :         validatorsTotal += _bidAmount;
-     372                 :            : 
-     373                 :          4 :         return _bidAmount;
-     374                 :            :     }
-     375                 :            : 
-     376                 :            :     function _handleBalancesFast(uint256 _bidAmount, uint256 balanceBefore, address _searcherToAddress) internal returns (uint256) {
-     377                 :            :         // Verify that the searcher paid the amount they bid & emit the event
-     378         [ #  # ]:          0 :         if (address(this).balance - balanceBefore < _bidAmount) {
-     379                 :          0 :             revert RelayNotRepaid(_bidAmount, address(this).balance - balanceBefore);
-     380                 :            :         }
-     381                 :            : 
-     382                 :            :         // Check if searcher overpaid and, if so, initiate a refund
-     383                 :          0 :         uint256 surplus = (address(this).balance - balanceBefore) - _bidAmount;
-     384         [ #  # ]:          0 :         if (surplus > 0) {
-     385                 :            : 
-     386                 :            :             // Only refund the searcher if the refund value exceeds its gas cost
-     387         [ #  # ]:          0 :             if (surplus > REFUND_GAS_SPENT * tx.gasprice) {
-     388                 :            :                 
-     389                 :            :                 // If value came from the EOA, refund to EOA
-     390         [ #  # ]:          0 :                 if (msg.value > _bidAmount) {
-     391                 :          0 :                     SafeTransferLib.safeTransferETH(
-     392                 :            :                         tx.origin, 
-     393                 :            :                         surplus
-     394                 :            :                     );
-     395                 :            :                 
-     396                 :            :                 // Otherwise refund the searcher contract
-     397                 :            :                 } else {
-     398                 :          0 :                     SafeTransferLib.safeTransferETH(
-     399                 :            :                         _searcherToAddress, 
-     400                 :            :                         surplus
-     401                 :            :                     );
-     402                 :            :                 }
-     403                 :            :             
-     404                 :            :             // If refunding is too expensive, add it to _bidAmount
-     405                 :            :             } else {
-     406                 :          0 :                 _bidAmount += surplus;
-     407                 :            :             }
-     408                 :            :         }
-     409                 :            : 
-     410                 :          0 :         validatorsBalanceMap[block.coinbase] += _bidAmount;
-     411                 :          0 :         validatorsTotal += _bidAmount;
-     412                 :            :         
-     413                 :          0 :         return _bidAmount;
-     414                 :            :     }
-     415                 :            : 
-     416                 :            :     /// Verifies the searcher paid for the bid and handles a refund to specified address
-     417                 :            :     function _handleBalancesWithRefundAndEmit(
-     418                 :            :         uint256 bidAmount,
-     419                 :            :         uint256 balanceBefore,
-     420                 :            :         address refundAddress,
-     421                 :            :         bytes32 oppTxHash,
-     422                 :            :         address searcherContract
-     423                 :            :     ) internal {
-     424                 :          2 :         uint256 originalBidAmount = bidAmount;
-     425                 :            : 
-     426         [ #  + ]:          2 :         if (address(this).balance < balanceBefore + bidAmount) {
-     427                 :          0 :             revert RelayNotRepaid(bidAmount, address(this).balance - balanceBefore);
-     428                 :            :         }
-     429                 :            : 
-     430         [ +  + ]:          2 :         if (address(this).balance - balanceBefore > bidAmount) {
-     431                 :          1 :             bidAmount = address(this).balance - balanceBefore;
-     432                 :            :         }
-     433                 :            : 
-     434                 :            :         // Calculate the split of payment
-     435                 :          2 :         uint256 validatorShare = (validatorsRefundShareMap[block.coinbase] * bidAmount) / VALIDATOR_REFUND_SCALE;
-     436                 :          2 :         uint256 refundAmount = bidAmount - validatorShare; // subtract to ensure no overflow
-     437                 :            : 
-     438                 :            :         // Update balance and make payment
-     439                 :          2 :         validatorsBalanceMap[block.coinbase] += validatorShare;
-     440                 :          2 :         validatorsTotal += validatorShare;
-     441                 :          2 :         payable(refundAddress).transfer(refundAmount);
-     442                 :            : 
-     443                 :          2 :         emit RelayFlashBidWithRefund(msg.sender, oppTxHash, block.coinbase, originalBidAmount, bidAmount, searcherContract, refundAmount, refundAddress);
-     444                 :            :     }
-     445                 :            : 
-     446                 :            :     receive() external payable {}
-     447                 :            : 
-     448                 :            :     fallback() external payable {}
-     449                 :            : 
-     450                 :            : 
-     451                 :            :     /***********************************|
-     452                 :            :     |             Maintenance           |
-     453                 :            :     |__________________________________*/
-     454                 :            : 
-     455                 :            :     /// @notice Syncs stuck matic to calling validator
-     456                 :            :     /// @dev In the event something went really wrong / vuln report
-     457                 :            :     function syncStuckNativeToken()
-     458                 :            :         external
-     459                 :            :         onlyActiveValidators
-     460                 :            :         nonReentrant
-     461                 :            :     {
-     462                 :          2 :         uint256 _expectedBalance = validatorsTotal;
-     463                 :          2 :         uint256 _currentBalance = address(this).balance;
-     464         [ +  + ]:          2 :         if (_currentBalance >= _expectedBalance) {
-     465                 :            : 
-     466                 :          2 :             address _validator = getValidator();
-     467                 :            : 
-     468                 :          2 :             uint256 _surplus = _currentBalance - _expectedBalance;
-     469                 :            : 
-     470                 :          2 :             validatorsBalanceMap[_validator] += _surplus;
-     471                 :          2 :             validatorsTotal += _surplus;
-     472                 :            : 
-     473                 :          2 :             emit RelayWithdrawStuckNativeToken(_validator, _surplus);
-     474                 :            :         }
-     475                 :            :     }
-     476                 :            : 
-     477                 :            :     /// @notice Withdraws stuck ERC20
-     478                 :            :     /// @dev In the event people send ERC20 instead of Matic we can send them back 
-     479                 :            :     /// @param _tokenAddress Address of the stuck token
-     480                 :            :     function withdrawStuckERC20(address _tokenAddress)
-     481                 :            :         external
-     482                 :            :         onlyActiveValidators
-     483                 :            :         nonReentrant
-     484                 :            :     {
-     485                 :          2 :         ERC20 oopsToken = ERC20(_tokenAddress);
-     486                 :          2 :         uint256 oopsTokenBalance = oopsToken.balanceOf(address(this));
-     487                 :            : 
-     488         [ +  + ]:          2 :         if (oopsTokenBalance > 0) {
-     489                 :          1 :             SafeTransferLib.safeTransfer(oopsToken, msg.sender, oopsTokenBalance);
-     490                 :          1 :             emit RelayWithdrawStuckERC20(address(this), msg.sender, oopsTokenBalance);
-     491                 :            :         }
-     492                 :            :     }
-     493                 :            : 
-     494                 :            :     /***********************************|
-     495                 :            :     |          Validator Functions      |
-     496                 :            :     |__________________________________*/
-     497                 :            : 
-     498                 :            :     /// @notice Pays the validator their outstanding balance
-     499                 :            :     /// @dev Callable by either validator address or their payee address (if not changed recently).
-     500                 :            :     function collectFees() external nonReentrant validPayee returns (uint256) { 
-     501                 :            :         // NOTE: Do not let validatorsBalanceMap[validator] balance go to 0, that will remove them from being an "active validator"       
-     502                 :          5 :         address _validator = getValidator();
-     503                 :            : 
-     504                 :          5 :         uint256 payableBalance = validatorsBalanceMap[_validator] - 1;  
-     505         [ +  + ]:          5 :         if (payableBalance <= 0) revert RelayCannotBeZero();
-     506                 :            : 
-     507                 :          4 :         validatorsTotal -= payableBalance;
-     508                 :          4 :         validatorsBalanceMap[_validator] = 1;
-     509                 :          4 :         validatorsDataMap[_validator].blockOfLastWithdraw = block.number;
-     510                 :          4 :         SafeTransferLib.safeTransferETH(
-     511                 :            :                 validatorPayee(_validator), 
-     512                 :            :                 payableBalance
-     513                 :            :         );
-     514                 :          4 :         emit RelayProcessingPaidValidator(_validator, payableBalance, msg.sender);
-     515                 :          4 :         return payableBalance;
-     516                 :            :     }
-     517                 :            : 
-     518                 :            :     /// @notice Updates a validator payee
-     519                 :            :     /// @dev Callable by either validator address or their payee address (if not changed recently).
-     520                 :            :     function updateValidatorPayee(address _payee) external validPayee nonReentrant {
-     521                 :            :         // NOTE: Payee cannot be updated until there is a valid balance in the fee vault
-     522         [ +  + ]:         23 :         if (_payee == address(0)) revert RelayCannotBeZero();
-     523         [ +  + ]:         22 :         if (_payee == address(this)) revert RelayCannotBeSelf();
-     524                 :            :         
-     525                 :         21 :         address _validator = getValidator();
-     526                 :            : 
-     527                 :         21 :         address _formerPayee = validatorsDataMap[_validator].payee;
-     528                 :            : 
-     529                 :            :         // Can't override with a validator
-     530                 :            :         // Can't override an already assigned payee
-     531         [ +  + ]:         21 :         if (payeeMap[_payee] != address(0) || validatorsBalanceMap[_payee] != 0) revert RelayPayeeUpdateInvalid();
-     532                 :            : 
-     533         [ +  + ]:         18 :         if (_formerPayee != address(0)) {
-     534                 :          7 :             payeeMap[_formerPayee] = address(0);
-     535                 :            :         }
-     536                 :            : 
-     537                 :         18 :         validatorsDataMap[_validator].payee = _payee;
-     538                 :         18 :         validatorsDataMap[_validator].timeUpdated = block.timestamp;
-     539                 :         18 :         payeeMap[_payee] = _validator;
-     540                 :            : 
-     541                 :         18 :         emit RelayValidatorPayeeUpdated(_validator, _payee, msg.sender);   
-     542                 :            :     }
-     543                 :            : 
-     544                 :            :     /// @notice Clears a validator payee
-     545                 :            :     /// @dev Callable by validator
-     546                 :            :     function clearValidatorPayee() external nonReentrant {
-     547         [ +  + ]:          4 :         if (validatorsBalanceMap[msg.sender] == 0) revert RelayNotActiveValidator(); 
-     548                 :          3 :         address _validator = msg.sender;
-     549                 :            : 
-     550                 :          3 :         address _formerPayee = validatorsDataMap[_validator].payee;
-     551                 :          3 :         validatorsDataMap[_validator].payee = address(0);
-     552                 :          3 :         validatorsDataMap[_validator].timeUpdated = block.timestamp;
-     553                 :          3 :         payeeMap[_formerPayee] = address(0);
-     554                 :            : 
-     555                 :          3 :         emit RelayValidatorPayeeUpdated(_validator, address(0), msg.sender);
-     556                 :            :     }
-     557                 :            : 
-     558                 :            :     /// @notice Updates a validator's share
-     559                 :            :     /// @param refundShare the share in % that should be paid to the validator
-     560                 :            :     function updateValidatorRefundShare(uint256 refundShare) public validPayee nonReentrant {
-     561                 :          2 :         address validator = getValidator();
-     562                 :            : 
-     563                 :            :         // ensure that validators can't insert txs to boost their refund rates during their own blocks
-     564         [ +  + ]:          2 :         if (validator == block.coinbase) revert RelayImmutableBlockAuthorRate();
-     565                 :            : 
-     566                 :          1 :         validatorsRefundShareMap[validator] = refundShare;
-     567                 :            :     }
-     568                 :            : 
-     569                 :            :     /***********************************|
-     570                 :            :     |              Views                |
-     571                 :            :     |__________________________________*/
-     572                 :            : 
-     573                 :            :     function isPayeeTimeLocked(address _validator) public view returns (bool _isTimeLocked) {
-     574                 :         33 :         _isTimeLocked = block.timestamp < validatorsDataMap[_validator].timeUpdated + BLOCK_TIMELOCK;
-     575                 :            :     }
-     576                 :            : 
-     577                 :            :     function isValidPayee(address _validator, address _payee) public view returns (bool _valid) {
-     578                 :          2 :         _valid = !isPayeeTimeLocked(_validator) && _payee == validatorsDataMap[_validator].payee;
-     579                 :            :     }
-     580                 :            : 
-     581                 :            :     function validatorPayee(address _validator) internal view returns (address _recipient) {
-     582                 :         16 :         address _payee = validatorsDataMap[_validator].payee;
-     583                 :         16 :         _recipient = !isPayeeTimeLocked(_validator) && _payee != address(0) && validatorsBalanceMap[_payee] == 0 ? _payee : _validator;
-     584                 :            :     }
-     585                 :            : 
-     586                 :            :     /// @notice Returns validator pending balance
-     587                 :            :     function getValidatorBalance(address _validator) public view returns (uint256 _validatorBalance) {
-     588                 :          5 :         _validatorBalance = validatorsBalanceMap[_validator];
-     589                 :            :     }
-     590                 :            : 
-     591                 :            :     /// @notice Returns the listed payee address regardless of whether or not it has passed the time lock.
-     592                 :            :     function getValidatorPayee(address _validator) public view returns (address _payee) {
-     593                 :          8 :         _payee = validatorsDataMap[_validator].payee;
-     594                 :            :     }
-     595                 :            : 
-     596                 :            :     /// @notice Returns the last block in which a validator withdrew their fees
-     597                 :            :     function getValidatorBlockOfLastWithdraw(address _validator) public view returns (uint256 _blockNumber) {
-     598                 :          2 :         _blockNumber = validatorsDataMap[_validator].blockOfLastWithdraw;
-     599                 :            :     }
-     600                 :            : 
-     601                 :            :     /// @notice For validators to determine where their payments will go
-     602                 :            :     /// @dev Will return the Payee if blockTimeLock has passed, will return Validator if not.
-     603                 :            :     /// @param _validator Address
-     604                 :            :     function getValidatorRecipient(address _validator) public view returns (address _recipient) {
-     605                 :         12 :         _recipient = validatorPayee(_validator);
-     606                 :            :     }
-     607                 :            :     
-     608                 :            : 
-     609                 :            :     function getValidator() internal view returns (address) {
-     610         [ +  + ]:         31 :         if (validatorsBalanceMap[msg.sender] > 0) {
-     611                 :         23 :             return msg.sender;
-     612                 :            :         }
-     613         [ +  # ]:          8 :         if (payeeMap[msg.sender] != address(0)) {
-     614                 :          8 :             return payeeMap[msg.sender];
-     615                 :            :         }
-     616                 :            :         // throw if invalid
-     617                 :          0 :         revert("Invalid validator");
-     618                 :            :     }
-     619                 :            : 
-     620                 :            :     /***********************************|
-     621                 :            :     |             Modifiers             |
-     622                 :            :     |__________________________________*/
-     623                 :            : 
-     624                 :            :     modifier onlyActiveValidators() {
-     625                 :            :         if (validatorsBalanceMap[msg.sender] == 0 && validatorsBalanceMap[payeeMap[msg.sender]] == 0) revert RelayNotActiveValidator();
-     626                 :            :         _;
-     627                 :            :     }
-     628                 :            : 
-     629                 :            :     modifier validPayee() {
-     630                 :            :         if (payeeMap[msg.sender] != address(0)) {
-     631                 :            :             if (isPayeeTimeLocked(payeeMap[msg.sender])) revert RelayPayeeIsTimelocked();
-     632                 :            :         } else {
-     633                 :            :             if (validatorsBalanceMap[msg.sender] == 0) revert RelayInvalidSender();
-     634                 :            :         }
-     635                 :            :         _;
-     636                 :            :     }
-     637                 :            : 
-     638                 :            :     modifier onlyEOA() {
-     639                 :            :         if (msg.sender != tx.origin) revert RelayPermissionSenderNotOrigin();
-     640                 :            :         _;
-     641                 :            :     }
-     642                 :            : 
-     643                 :            :     /// @notice Validates incoming bid
-     644                 :            :     /// @dev 
-     645                 :            :     /// @param _oppTxHash Target Transaction hash
-     646                 :            :     /// @param _bidAmount Amount committed to be repaid
-     647                 :            :     modifier checkBid(bytes32 _oppTxHash, uint256 _bidAmount) {
-     648                 :            :         if (_bidAmount == 0) {
-     649                 :            :             revert RelayAuctionInvalidBid();
-     650                 :            :         }
-     651                 :            : 
-     652                 :            :         // Use hash of the opportunity tx hash and the transaction's gasprice as key for bid tracking
-     653                 :            :         // This is dependent on the PFL Relay verifying that the searcher's gasprice matches
-     654                 :            :         // the opportunity's gasprice, and that the searcher used the correct opportunity tx hash
-     655                 :            : 
-     656                 :            :         bytes32 auction_key = keccak256(abi.encode(_oppTxHash, tx.gasprice));
-     657                 :            :         uint256 existing_bid = fulfilledAuctionsMap[auction_key];
-     658                 :            : 
-     659                 :            :         if (existing_bid != 0) {
-     660                 :            :             if (_bidAmount >= existing_bid) {
-     661                 :            :                 // This error message could also arise if the tx was sent via mempool
-     662                 :            :                 revert RelayAuctionBidReceivedLate();
-     663                 :            :             } else {
-     664                 :            :                 revert RelayAuctionSearcherNotWinner(_bidAmount, existing_bid);
-     665                 :            :             }
-     666                 :            :         }
-     667                 :            : 
-     668                 :            :         _;
-     669                 :            : 
-     670                 :            :         // Mark this auction as being complete to provide quicker reverts for subsequent searchers
-     671                 :            :         fulfilledAuctionsMap[auction_key] = _bidAmount;
-     672                 :            :     }
-     673                 :            : 
-     674                 :            :     modifier validatedValidator(address[] calldata approvedVals) {
-     675                 :            :         if (approvedVals.length == 0 || _validateValidator(approvedVals)) {
-     676                 :            :             _;
-     677                 :            :         }
-     678                 :            :     }
-     679                 :            : 
-     680                 :            :     function _validateValidator(address[] calldata approvedVals) 
-     681                 :            :         internal 
-     682                 :            :         view 
-     683                 :            :         returns (bool validValidator) 
-     684                 :            :     {
-     685                 :          0 :         uint256 valsLength = approvedVals.length;
-     686                 :          0 :         uint256 i;
-     687                 :          0 :         for(;i<valsLength;) {
-     688         [ #  # ]:          0 :             if (block.coinbase == approvedVals[i]) {
-     689                 :          0 :                 return true;
-     690                 :            :             }
-     691                 :          0 :             unchecked { ++i; }
-     692                 :            :         } 
-     693                 :          0 :         return false;
-     694                 :            :     }
-     695                 :            : 
-     696                 :            :     /// @notice Validates incoming PGA bid
-     697                 :            :     /// @dev 
-     698                 :            :     /// @param fastGasPrice Amount committed to be repaid
-     699                 :            :     modifier checkPGA(uint256 fastGasPrice) {
-     700                 :            :         if (fastGasPrice == 0 || fastGasPrice > tx.gasprice) {
-     701                 :            :             revert RelayAuctionInvalidBid();
-     702                 :            :         }
-     703                 :            : 
-     704                 :            :         PGAData memory existing_bid = fulfilledPGAMap[block.number];
-     705                 :            :         uint256 lowestFastPrice = uint256(existing_bid.lowestFastPrice);
-     706                 :            :         uint256 lowestGasPrice = uint256(existing_bid.lowestGasPrice);
-     707                 :            :         uint256 lowestTotalPrice = uint256(existing_bid.lowestTotalPrice);
-     708                 :            : 
-     709                 :            :         // NOTE: These checks help mitigate the damage to searchers caused by relay error and adversarial validators by reverting
-     710                 :            :         // early if the transactions are not sequenced pursuant to auction rules. 
-     711                 :            : 
-     712                 :            :         // Do not execute if a fastBid tx with a lower gasPrice was executed prior to this tx in the same block. 
-     713                 :            :         // NOTE: This edge case should only be achieveable via validator manipulation or erratic searcher nonce management 
-     714                 :            :         if (lowestGasPrice != 0 && lowestGasPrice < tx.gasprice) {
-     715                 :            :             emit RelayInvestigateOutcome(block.coinbase, msg.sender, block.number, lowestFastPrice, fastGasPrice, lowestGasPrice, tx.gasprice);
-     716                 :            :         
-     717                 :            :         // Do not execute if a fastBid tx with a lower bid amount was executed prior to this tx in the same block.  
-     718                 :            :         } else if (lowestTotalPrice != 0 && lowestTotalPrice <= fastGasPrice + tx.gasprice) {
-     719                 :            :             emit RelayInvestigateOutcome(block.coinbase, msg.sender, block.number, lowestFastPrice, fastGasPrice, lowestGasPrice, tx.gasprice);
-     720                 :            :         
-     721                 :            :         // Execute the tx if there are no issues w/ ordering. 
-     722                 :            :         } else {
-     723                 :            :             _;
-     724                 :            :             // Mark this auction as being complete to provide quicker reverts for subsequent searchers
-     725                 :            :             fulfilledPGAMap[block.number] = PGAData({
-     726                 :            :                 lowestGasPrice: uint64(tx.gasprice), 
-     727                 :            :                 lowestFastPrice: uint64(fastGasPrice),
-     728                 :            :                 lowestTotalPrice: uint64(fastGasPrice + tx.gasprice)
-     729                 :            :             });
-     730                 :            :         }
-     731                 :            :     }
-     732                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/auction-handler/index-sort-b.html b/report/contracts/auction-handler/index-sort-b.html deleted file mode 100644 index 9ffe68d..0000000 --- a/report/contracts/auction-handler/index-sort-b.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/auction-handler - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/auction-handlerHitTotalCoverage
Test:lcov.infoLines:9913076.2 %
Date:2023-09-07 01:01:29Functions:232688.5 %
Branches:456668.2 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneAuctionHandler.sol -
76.2%76.2%
-
76.2 %99 / 13088.5 %23 / 2668.2 %45 / 66
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/auction-handler/index-sort-f.html b/report/contracts/auction-handler/index-sort-f.html deleted file mode 100644 index 92589a6..0000000 --- a/report/contracts/auction-handler/index-sort-f.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/auction-handler - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/auction-handlerHitTotalCoverage
Test:lcov.infoLines:9913076.2 %
Date:2023-09-07 01:01:29Functions:232688.5 %
Branches:456668.2 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneAuctionHandler.sol -
76.2%76.2%
-
76.2 %99 / 13088.5 %23 / 2668.2 %45 / 66
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/auction-handler/index-sort-l.html b/report/contracts/auction-handler/index-sort-l.html deleted file mode 100644 index 27612be..0000000 --- a/report/contracts/auction-handler/index-sort-l.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/auction-handler - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/auction-handlerHitTotalCoverage
Test:lcov.infoLines:9913076.2 %
Date:2023-09-07 01:01:29Functions:232688.5 %
Branches:456668.2 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneAuctionHandler.sol -
76.2%76.2%
-
76.2 %99 / 13088.5 %23 / 2668.2 %45 / 66
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/auction-handler/index.html b/report/contracts/auction-handler/index.html deleted file mode 100644 index 8e96c49..0000000 --- a/report/contracts/auction-handler/index.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/auction-handler - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/auction-handlerHitTotalCoverage
Test:lcov.infoLines:9913076.2 %
Date:2023-09-07 01:01:29Functions:232688.5 %
Branches:456668.2 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneAuctionHandler.sol -
76.2%76.2%
-
76.2 %99 / 13088.5 %23 / 2668.2 %45 / 66
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/helpers/SearcherHelperRepayerEcho.sol.func-sort-c.html b/report/contracts/helpers/SearcherHelperRepayerEcho.sol.func-sort-c.html deleted file mode 100644 index dc50335..0000000 --- a/report/contracts/helpers/SearcherHelperRepayerEcho.sol.func-sort-c.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/helpers/SearcherHelperRepayerEcho.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/helpers - SearcherHelperRepayerEcho.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:050.0 %
Date:2023-09-07 01:01:29Functions:010.0 %
Branches:020.0 %
-
- -
- - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
SearcherHelperRepayerEcho.fastLaneCall0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/helpers/SearcherHelperRepayerEcho.sol.func.html b/report/contracts/helpers/SearcherHelperRepayerEcho.sol.func.html deleted file mode 100644 index d470133..0000000 --- a/report/contracts/helpers/SearcherHelperRepayerEcho.sol.func.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/helpers/SearcherHelperRepayerEcho.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/helpers - SearcherHelperRepayerEcho.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:050.0 %
Date:2023-09-07 01:01:29Functions:010.0 %
Branches:020.0 %
-
- -
- - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
SearcherHelperRepayerEcho.fastLaneCall0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/helpers/SearcherHelperRepayerEcho.sol.gcov.html b/report/contracts/helpers/SearcherHelperRepayerEcho.sol.gcov.html deleted file mode 100644 index 7a932eb..0000000 --- a/report/contracts/helpers/SearcherHelperRepayerEcho.sol.gcov.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/helpers/SearcherHelperRepayerEcho.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/helpers - SearcherHelperRepayerEcho.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:050.0 %
Date:2023-09-07 01:01:29Functions:010.0 %
Branches:020.0 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : //SPDX-License-Identifier: Unlicensed
-       2                 :            : pragma solidity ^0.8.16;
-       3                 :            : 
-       4                 :            : // Example Contract that sends back _bidAmount to msg.sender
-       5                 :            : // It ignores _sender and _searcherCallData
-       6                 :            : // Used for testing purposes
-       7                 :            : contract SearcherHelperRepayerEcho {
-       8                 :            :     function fastLaneCall(
-       9                 :            :             address _sender,
-      10                 :            :             uint256 _bidAmount,
-      11                 :            :             bytes calldata _searcherCallData
-      12                 :            :     ) external payable returns (bool, bytes memory) {
-      13                 :          0 :         bool success;
-      14                 :          0 :         address to = msg.sender;
-      15                 :            :         assembly {
-      16                 :            :             // Transfer the ETH and store if it succeeded or not.
-      17                 :          0 :             success := call(gas(), to, _bidAmount, 0, 0, 0, 0)
-      18                 :            :         }
-      19                 :            : 
-      20         [ #  # ]:          0 :         require(success, "ETH_TRANSFER_FAILED");
-      21                 :          0 :         return (true,bytes("ok"));
-      22                 :            :     }
-      23                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/helpers/index-sort-b.html b/report/contracts/helpers/index-sort-b.html deleted file mode 100644 index 852e867..0000000 --- a/report/contracts/helpers/index-sort-b.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/helpers - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/helpersHitTotalCoverage
Test:lcov.infoLines:050.0 %
Date:2023-09-07 01:01:29Functions:010.0 %
Branches:020.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
SearcherHelperRepayerEcho.sol -
0.0%
-
0.0 %0 / 50.0 %0 / 10.0 %0 / 2
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/helpers/index-sort-f.html b/report/contracts/helpers/index-sort-f.html deleted file mode 100644 index ca98602..0000000 --- a/report/contracts/helpers/index-sort-f.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/helpers - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/helpersHitTotalCoverage
Test:lcov.infoLines:050.0 %
Date:2023-09-07 01:01:29Functions:010.0 %
Branches:020.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
SearcherHelperRepayerEcho.sol -
0.0%
-
0.0 %0 / 50.0 %0 / 10.0 %0 / 2
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/helpers/index-sort-l.html b/report/contracts/helpers/index-sort-l.html deleted file mode 100644 index dacd534..0000000 --- a/report/contracts/helpers/index-sort-l.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/helpers - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/helpersHitTotalCoverage
Test:lcov.infoLines:050.0 %
Date:2023-09-07 01:01:29Functions:010.0 %
Branches:020.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
SearcherHelperRepayerEcho.sol -
0.0%
-
0.0 %0 / 50.0 %0 / 10.0 %0 / 2
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/helpers/index.html b/report/contracts/helpers/index.html deleted file mode 100644 index 0a83bf2..0000000 --- a/report/contracts/helpers/index.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/helpers - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/helpersHitTotalCoverage
Test:lcov.infoLines:050.0 %
Date:2023-09-07 01:01:29Functions:010.0 %
Branches:020.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
SearcherHelperRepayerEcho.sol -
0.0%
-
0.0 %0 / 50.0 %0 / 10.0 %0 / 2
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/index-sort-b.html b/report/contracts/index-sort-b.html deleted file mode 100644 index 62745b6..0000000 --- a/report/contracts/index-sort-b.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contractsHitTotalCoverage
Test:lcov.infoLines:0110.0 %
Date:2023-09-07 01:01:29Functions:030.0 %
Branches:060.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneFactory.sol -
0.0%
-
0.0 %0 / 110.0 %0 / 30.0 %0 / 6
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/index-sort-f.html b/report/contracts/index-sort-f.html deleted file mode 100644 index 7251ad1..0000000 --- a/report/contracts/index-sort-f.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contractsHitTotalCoverage
Test:lcov.infoLines:0110.0 %
Date:2023-09-07 01:01:29Functions:030.0 %
Branches:060.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneFactory.sol -
0.0%
-
0.0 %0 / 110.0 %0 / 30.0 %0 / 6
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/index-sort-l.html b/report/contracts/index-sort-l.html deleted file mode 100644 index afbc6ce..0000000 --- a/report/contracts/index-sort-l.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contractsHitTotalCoverage
Test:lcov.infoLines:0110.0 %
Date:2023-09-07 01:01:29Functions:030.0 %
Branches:060.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneFactory.sol -
0.0%
-
0.0 %0 / 110.0 %0 / 30.0 %0 / 6
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/index.html b/report/contracts/index.html deleted file mode 100644 index 5183dbf..0000000 --- a/report/contracts/index.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contractsHitTotalCoverage
Test:lcov.infoLines:0110.0 %
Date:2023-09-07 01:01:29Functions:030.0 %
Branches:060.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneFactory.sol -
0.0%
-
0.0 %0 / 110.0 %0 / 30.0 %0 / 6
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-relay/FastLaneRelay.sol.func-sort-c.html b/report/contracts/jit-relay/FastLaneRelay.sol.func-sort-c.html deleted file mode 100644 index 3b5f158..0000000 --- a/report/contracts/jit-relay/FastLaneRelay.sol.func-sort-c.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-relay/FastLaneRelay.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-relay - FastLaneRelay.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:549159.3 %
Date:2022-11-15 17:07:48Functions:153050.0 %
Branches:204247.6 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
FastLaneRelay.0
FastLaneRelay.disableRelayValidator0
FastLaneRelay.getCurrentStakeRatio0
FastLaneRelay.getPendingDeadline0
FastLaneRelay.getPendingStakeRatio0
FastLaneRelay.getValidatorPayee0
FastLaneRelay.getValidatorRecipient0
FastLaneRelay.getValidatorStatus0
FastLaneRelay.recoverDust0
FastLaneRelay.setFastLaneStakeShare0
FastLaneRelay.setMininumBidAmount0
FastLaneRelay.triggerPendingStakeShareUpdate0
FastLaneRelay.withdrawStakeShare0
FastLaneRelay.withdrawStuckERC200
FastLaneRelay.withdrawStuckNativeToken0
FastLaneRelay._validatorPayee1
FastLaneRelay.setPausedState1
FastLaneRelay._calculateStakeShare2
FastLaneRelay._isValidPayee2
FastLaneRelay.getCurrentStakeBalance2
FastLaneRelay.getValidatorBalance2
FastLaneRelay.humanizeError2
FastLaneRelay.updateValidatorPayee2
FastLaneRelay._isPayeeNotTimeLocked3
FastLaneRelay._handleBalances4
FastLaneRelay.enableRelayValidator4
FastLaneRelay.payValidator4
FastLaneRelay.slice4
FastLaneRelay._checkBid12
FastLaneRelay.submitFlashBid16
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-relay/FastLaneRelay.sol.func.html b/report/contracts/jit-relay/FastLaneRelay.sol.func.html deleted file mode 100644 index 904954b..0000000 --- a/report/contracts/jit-relay/FastLaneRelay.sol.func.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-relay/FastLaneRelay.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-relay - FastLaneRelay.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:549159.3 %
Date:2022-11-15 17:07:48Functions:153050.0 %
Branches:204247.6 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
FastLaneRelay.0
FastLaneRelay._calculateStakeShare2
FastLaneRelay._checkBid12
FastLaneRelay._handleBalances4
FastLaneRelay._isPayeeNotTimeLocked3
FastLaneRelay._isValidPayee2
FastLaneRelay._validatorPayee1
FastLaneRelay.disableRelayValidator0
FastLaneRelay.enableRelayValidator4
FastLaneRelay.getCurrentStakeBalance2
FastLaneRelay.getCurrentStakeRatio0
FastLaneRelay.getPendingDeadline0
FastLaneRelay.getPendingStakeRatio0
FastLaneRelay.getValidatorBalance2
FastLaneRelay.getValidatorPayee0
FastLaneRelay.getValidatorRecipient0
FastLaneRelay.getValidatorStatus0
FastLaneRelay.humanizeError2
FastLaneRelay.payValidator4
FastLaneRelay.recoverDust0
FastLaneRelay.setFastLaneStakeShare0
FastLaneRelay.setMininumBidAmount0
FastLaneRelay.setPausedState1
FastLaneRelay.slice4
FastLaneRelay.submitFlashBid16
FastLaneRelay.triggerPendingStakeShareUpdate0
FastLaneRelay.updateValidatorPayee2
FastLaneRelay.withdrawStakeShare0
FastLaneRelay.withdrawStuckERC200
FastLaneRelay.withdrawStuckNativeToken0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-relay/FastLaneRelay.sol.gcov.html b/report/contracts/jit-relay/FastLaneRelay.sol.gcov.html deleted file mode 100644 index 9e439af..0000000 --- a/report/contracts/jit-relay/FastLaneRelay.sol.gcov.html +++ /dev/null @@ -1,603 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-relay/FastLaneRelay.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-relay - FastLaneRelay.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:549159.3 %
Date:2022-11-15 17:07:48Functions:153050.0 %
Branches:204247.6 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : //SPDX-License-Identifier: Unlicensed
-       2                 :            : pragma solidity ^0.8.16;
-       3                 :            : 
-       4                 :            : import "openzeppelin-contracts/contracts/access/Ownable.sol";
-       5                 :            : import "openzeppelin-contracts/contracts/utils/Address.sol";
-       6                 :            : import { SafeTransferLib, ERC20 } from "solmate/utils/SafeTransferLib.sol";
-       7                 :            : import { ReentrancyGuard } from "solmate/utils/ReentrancyGuard.sol";
-       8                 :            : 
-       9                 :            : 
-      10                 :            : abstract contract FastLaneRelayEvents {
-      11                 :            : 
-      12                 :            :     event RelayPausedStateSet(bool state);
-      13                 :            :     event RelayValidatorEnabled(address validator, address payee);
-      14                 :            :     event RelayValidatorDisabled(address validator);
-      15                 :            :     event RelayValidatorPayeeUpdated(address validator, address payee, address indexed initiator);
-      16                 :            : 
-      17                 :            :     event RelayInitialized(uint24 initialStakeShare, uint256 minAmount, bool restrictEOA);
-      18                 :            : 
-      19                 :            :     event RelayShareSet(uint24 amount);
-      20                 :            :     event RelayShareProposed(uint24 amount, uint256 deadline);
-      21                 :            :     event RelayMinAmountSet(uint256 minAmount);
-      22                 :            : 
-      23                 :            :     event RelayFlashBid(address indexed sender, uint256 amount, bytes32 indexed oppTxHash, address indexed validator, address searcherContractAddress);
-      24                 :            : 
-      25                 :            :     event RelayWithdrawDust(address indexed receiver, uint256 amount);
-      26                 :            :     event RelayWithdrawStuckERC20(
-      27                 :            :         address indexed receiver,
-      28                 :            :         address indexed token,
-      29                 :            :         uint256 amount
-      30                 :            :     );
-      31                 :            :     event RelayWithdrawStuckNativeToken(address indexed receiver, uint256 amount);
-      32                 :            :    
-      33                 :            : 
-      34                 :            :     error RelayInequalityTooHigh();
-      35                 :            : 
-      36                 :            :     error RelayPermissionPaused();
-      37                 :            :     error RelayPermissionNotFastlaneValidator();
-      38                 :            :     error RelayPermissionSenderNotOrigin();
-      39                 :            :     error RelayPermissionUnauthorized();
-      40                 :            : 
-      41                 :            :     error RelayWrongInit();
-      42                 :            :     error RelaySearcherWrongParams();
-      43                 :            : 
-      44                 :            :     error RelaySearcherCallFailure(bytes retData);
-      45                 :            :     error RelayNotRepaid(uint256 bidAmount, uint256 actualAmount);
-      46                 :            : 
-      47                 :            :     event RelayProcessingPaidValidator(address indexed validator, uint256 validatorPayment, address indexed initiator);
-      48                 :            :     event RelayProcessingWithdrewStakeShare(address indexed recipient, uint256 amountWithdrawn);
-      49                 :            :     error RelayProcessingNoBalancePayable();
-      50                 :            :     error RelayProcessingAmountExceedsBalance(uint256 amountRequested, uint256 balance);
-      51                 :            :     
-      52                 :            :     error RelayAuctionBidReceivedLate();
-      53                 :            :     error RelayAuctionSearcherNotWinner(uint256 current, uint256 existing);
-      54                 :            : 
-      55                 :            :     error RelayTimeUnsuitable();
-      56                 :            :     error RelayCannotBeZero();
-      57                 :            :     error RelayCannotBeSelf();
-      58                 :            : }
-      59                 :            : 
-      60                 :            : /// @notice Validator Data Struct
-      61                 :            : /// @dev Subject to BLOCK_TIMELOCK for changes
-      62                 :            : /// @param payee Who to pay for this validator
-      63                 :            : /// @param timeUpdated Last time a change was requested for this validator payee
-      64                 :            : struct ValidatorData {
-      65                 :            :     address payee;
-      66                 :            :     uint256 timeUpdated;
-      67                 :            : }
-      68                 :            : 
-      69                 :            : interface ISearcherContract {
-      70                 :            :     function fastLaneCall(address, uint256, bytes calldata) external payable returns (bool, bytes memory);
-      71                 :            : }
-      72                 :            : 
-      73                 :            : contract FastLaneRelay is FastLaneRelayEvents, Ownable, ReentrancyGuard {
-      74                 :            : 
-      75                 :            :     /// @notice Constant delay before the stake share can be changed
-      76                 :            :     uint32 internal constant BLOCK_TIMELOCK = 6 days;
-      77                 :            : 
-      78                 :            :     /// @notice Constant base fee
-      79                 :            :     uint24 internal constant FEE_BASE = 1_000_000;
-      80                 :            : 
-      81                 :            : 
-      82                 :            : 
-      83                 :            : 
-      84                 :            :     /// @notice If a validator is active or not
-      85                 :            :     mapping(address => bool) public validatorsStatusMap;
-      86                 :            : 
-      87                 :            :     /// @notice Mapping to Validator Data Struct
-      88                 :            :     mapping(address => ValidatorData) internal validatorsDataMap;
-      89                 :            : 
-      90                 :            :     /// @notice Map[validator] = balance
-      91                 :            :     mapping(address => uint256) public validatorsBalanceMap;
-      92                 :            : 
-      93                 :            :     /// @notice Map key is keccak hash of opp tx's gasprice and tx hash
-      94                 :            :     mapping(bytes32 => uint256) public fulfilledAuctionsMap;
-      95                 :            : 
-      96                 :            :     uint256 public validatorsTotal;
-      97                 :            : 
-      98                 :            :     uint256 public flStakeSharePayable;
-      99                 :            :     uint24 public flStakeShareRatio;
-     100                 :            : 
-     101                 :            :     uint24 public proposalStakeShareRatio;
-     102                 :            :     uint256 public proposalDeadline;
-     103                 :            : 
-     104                 :            :     uint256 public minRelayBidAmount = 1 ether; // 1 Matic
-     105                 :            : 
-     106                 :            :     bool public pendingStakeShareUpdate;
-     107                 :            :     bool public paused;
-     108                 :            :     bool public RESTRICT_EOA = true;
-     109                 :            : 
-     110                 :            :     constructor(uint24 _initialStakeShare, uint256 _minRelayBidAmount, bool _restrictEOA) {
-     111                 :            :         flStakeShareRatio = _initialStakeShare;
-     112                 :            :         minRelayBidAmount = _minRelayBidAmount;
-     113                 :            :         RESTRICT_EOA = _restrictEOA; // Cannot change after deploy
-     114                 :            :         emit RelayInitialized(_initialStakeShare, _minRelayBidAmount, RESTRICT_EOA);
-     115                 :            :     }
-     116                 :            : 
-     117                 :            : 
-     118                 :            :     /// @notice Submits a flash bid
-     119                 :            :     /// @dev Will revert if:  minimum bid not respected, not from EOA, or current validator is not participating in PFL.
-     120                 :            :     /// @param _bidAmount Amount committed to be repaid
-     121                 :            :     /// @param _oppTxHash Target Transaction hash
-     122                 :            :     /// @param _searcherToAddress Searcher contract address to be called on its `fastLaneCall` function.
-     123                 :            :     /// @param _searcherCallData callData to be passed to `_searcherToAddress.fastLaneCall(_bidAmount,msg.sender,callData)`
-     124                 :            :     function submitFlashBid(
-     125                 :            :         uint256 _bidAmount, // Value commited to be repaid at the end of execution
-     126                 :            :         bytes32 _oppTxHash, // Target TX
-     127                 :            :         address _searcherToAddress,
-     128                 :            :         bytes calldata _searcherCallData 
-     129                 :            :         ) external payable nonReentrant whenNotPaused onlyParticipatingValidators onlyEOA {
-     130                 :            : 
-     131         [ +  + ]:         15 :             if (_searcherToAddress == address(0) || _bidAmount < minRelayBidAmount) revert RelaySearcherWrongParams();
-     132                 :            :             
-     133                 :            :             // Make sure another searcher hasn't already won the opp
-     134                 :         12 :             _checkBid(_oppTxHash, _bidAmount);
-     135                 :            : 
-     136                 :            :             // Store the current balance, excluding msg.value
-     137                 :         10 :             uint256 balanceBefore = address(this).balance - msg.value;
-     138                 :            : 
-     139                 :            :             // Call the searcher's contract (see searcher_contract.sol for example of call receiver)
-     140                 :            :             // And forward msg.value
-     141                 :         10 :             (bool success, bytes memory retData) = ISearcherContract(_searcherToAddress).fastLaneCall{value: msg.value}(
-     142                 :            :                         msg.sender,
-     143                 :            :                         _bidAmount,
-     144                 :            :                         _searcherCallData
-     145                 :            :             );
-     146                 :            : 
-     147         [ +  + ]:          5 :             if (!success) revert RelaySearcherCallFailure(retData);
-     148                 :            : 
-     149                 :            :             // Verify that the searcher paid the amount they bid & emit the event
-     150                 :          4 :             _handleBalances(_bidAmount, balanceBefore);
-     151                 :          2 :             emit RelayFlashBid(msg.sender, _bidAmount, _oppTxHash, block.coinbase, _searcherToAddress);
-     152                 :            :     }
-     153                 :            : 
-     154                 :            :     /***********************************|
-     155                 :            :     |    Internal Bid Helper Functions  |
-     156                 :            :     |__________________________________*/
-     157                 :            : 
-     158                 :            :     /// @notice Validates incoming bid
-     159                 :            :     /// @dev 
-     160                 :            :     /// @param _oppTxHash Target Transaction hash
-     161                 :            :     /// @param _bidAmount Amount committed to be repaid
-     162                 :            :     function _checkBid(bytes32 _oppTxHash, uint256 _bidAmount) internal {
-     163                 :            :         // Use hash of the opportunity tx hash and the transaction's gasprice as key for bid tracking
-     164                 :            :         // This is dependent on the PFL Relay verifying that the searcher's gasprice matches
-     165                 :            :         // the opportunity's gasprice, and that the searcher used the correct opportunity tx hash
-     166                 :            : 
-     167                 :         12 :         bytes32 auction_key = keccak256(abi.encode(_oppTxHash, tx.gasprice));
-     168                 :         12 :         uint256 existing_bid = fulfilledAuctionsMap[auction_key];
-     169                 :            : 
-     170         [ +  + ]:         12 :         if (existing_bid != 0) {
-     171         [ +  + ]:          2 :             if (_bidAmount >= existing_bid) {
-     172                 :            :                 // This error message could also arise if the tx was sent via mempool
-     173                 :          1 :                 revert RelayAuctionBidReceivedLate();
-     174                 :            :             } else {
-     175                 :          1 :                 revert RelayAuctionSearcherNotWinner(_bidAmount, existing_bid);
-     176                 :            :             }
-     177                 :            :         }
-     178                 :            : 
-     179                 :            :         // Mark this auction as being complete to provide quicker reverts for subsequent searchers
-     180                 :         10 :         fulfilledAuctionsMap[auction_key] = _bidAmount;
-     181                 :            :     }
-     182                 :            : 
-     183                 :            :     function _handleBalances(uint256 _bidAmount, uint256 balanceBefore) internal {
-     184         [ +  + ]:          4 :         if (address(this).balance < balanceBefore + _bidAmount) {
-     185                 :          2 :             revert RelayNotRepaid(_bidAmount, address(this).balance - balanceBefore);
-     186                 :            :         }
-     187                 :            : 
-     188                 :          2 :         (uint256 amtPayableToValidator, uint256 amtPayableToStakers) = _calculateStakeShare(_bidAmount, flStakeShareRatio);
-     189                 :            : 
-     190                 :          2 :         validatorsBalanceMap[block.coinbase] += amtPayableToValidator;
-     191                 :          2 :         validatorsTotal += amtPayableToValidator;
-     192                 :          2 :         flStakeSharePayable += amtPayableToStakers;
-     193                 :            :     }
-     194                 :            : 
-     195                 :            : 
-     196                 :            :     /// @notice Internal, calculates shares
-     197                 :            :     /// @param _amount Amount to calculates cuts from
-     198                 :            :     /// @param _share Share bps
-     199                 :            :     /// @return validatorCut Validator cut
-     200                 :            :     /// @return stakeCut Stake cut
-     201                 :            :     function _calculateStakeShare(uint256 _amount, uint24 _share) internal pure returns (uint256 validatorCut, uint256 stakeCut) {
-     202                 :          2 :         validatorCut = (_amount * (FEE_BASE - _share)) / FEE_BASE;
-     203                 :          2 :         stakeCut = _amount - validatorCut;
-     204                 :            :     }
-     205                 :            : 
-     206                 :            :     receive() external payable {}
-     207                 :            :     fallback() external payable {}
-     208                 :            : 
-     209                 :            : 
-     210                 :            :     /***********************************|
-     211                 :            :     |             Owner-only            |
-     212                 :            :     |__________________________________*/
-     213                 :            : 
-     214                 :            :     /// @notice Defines the paused state of the Auction
-     215                 :            :     /// @dev Only owner
-     216                 :            :     /// @param _state New state
-     217                 :            :     function setPausedState(bool _state) external onlyOwner {
-     218                 :          1 :         paused = _state;
-     219                 :          1 :         emit RelayPausedStateSet(_state);
-     220                 :            :     }
-     221                 :            : 
-     222                 :            :     /// @notice Defines the minimum bid
-     223                 :            :     /// @dev Only owner
-     224                 :            :     /// @param _minAmount New minimum amount
-     225                 :            :     function setMininumBidAmount(uint256 _minAmount) external onlyOwner {
-     226                 :          0 :         minRelayBidAmount = _minAmount;
-     227                 :          0 :         emit RelayMinAmountSet(_minAmount);
-     228                 :            :     }
-     229                 :            : 
-     230                 :            :     /// @notice Sets the stake revenue allocation (out of 1_000_000 (ie v2 fee decimals))
-     231                 :            :     /// @dev Initially set to 50_000 (5%), and pending for 6 days before a change
-     232                 :            :     /// @param _fastLaneStakeShare Protocol stake allocation on bids
-     233                 :            :     function setFastLaneStakeShare(uint24 _fastLaneStakeShare) public onlyOwner {
-     234         [ #  # ]:          0 :         if (pendingStakeShareUpdate) revert RelayTimeUnsuitable();
-     235         [ #  # ]:          0 :         if (_fastLaneStakeShare > FEE_BASE) revert RelayInequalityTooHigh();
-     236                 :          0 :         proposalStakeShareRatio = _fastLaneStakeShare;
-     237                 :          0 :         proposalDeadline = block.timestamp + BLOCK_TIMELOCK;
-     238                 :          0 :         pendingStakeShareUpdate = true;
-     239                 :          0 :         emit RelayShareProposed(_fastLaneStakeShare, proposalDeadline);
-     240                 :            :     }
-     241                 :            : 
-     242                 :            :     /// @notice Withdraws fl stake share
-     243                 :            :     /// @dev Owner only
-     244                 :            :     /// @param _recipient Recipient
-     245                 :            :     /// @param _amount Amount
-     246                 :            :     function withdrawStakeShare(address _recipient, uint256 _amount) external onlyOwner nonReentrant {
-     247         [ #  # ]:          0 :         if (_recipient == address(0) || _amount == 0) revert RelayCannotBeZero();
-     248                 :          0 :         flStakeSharePayable -= _amount;
-     249                 :          0 :         SafeTransferLib.safeTransferETH(
-     250                 :            :             _recipient, 
-     251                 :            :             _amount
-     252                 :            :         );
-     253                 :          0 :         emit RelayProcessingWithdrewStakeShare(_recipient, _amount);
-     254                 :            :     }
-     255                 :            :     
-     256                 :            : 
-     257                 :            :     /// @notice Enables an address as participating validator, and defining a payee for it
-     258                 :            :     /// @dev Owner only
-     259                 :            :     /// @param _validator Validator address that will be the coinbase of bids
-     260                 :            :     /// @param _payee Address that can withdraw for that validator
-     261                 :            :     function enableRelayValidator(address _validator, address _payee) external onlyOwner {
-     262         [ +  + ]:          4 :         if (_validator == address(0) || _payee == address(0)) revert RelayCannotBeZero();
-     263         [ #  + ]:          3 :         if (_payee == address(this)) revert RelayCannotBeSelf();
-     264                 :          3 :         validatorsStatusMap[_validator] = true;
-     265                 :          3 :         validatorsDataMap[_validator] = ValidatorData(_payee, block.timestamp);
-     266                 :          3 :         emit RelayValidatorEnabled(_validator, _payee);
-     267                 :            :     }
-     268                 :            : 
-     269                 :            :     /// @notice Disabled an address as participating validator
-     270                 :            :     /// @dev Owner only
-     271                 :            :     /// @param _validator Validator address
-     272                 :            :     function disableRelayValidator(address _validator) external onlyOwner {
-     273         [ #  # ]:          0 :         if (_validator == address(0)) revert RelayCannotBeZero();
-     274                 :          0 :         validatorsStatusMap[_validator] = false;
-     275                 :          0 :         emit RelayValidatorDisabled(_validator);
-     276                 :            :     }
-     277                 :            : 
-     278                 :            :     /// @notice Recover bids repaid to the relay over bidAmount
-     279                 :            :     /// @dev Owner only, can never tap into validator balances nor flStake.
-     280                 :            :     /// @param _amount amount desired, capped to max
-     281                 :            :     function recoverDust(uint256 _amount) 
-     282                 :            :         external
-     283                 :            :         onlyOwner
-     284                 :            :         nonReentrant
-     285                 :            :     {
-     286                 :          0 :         uint256 maxDust = address(this).balance - validatorsTotal - flStakeSharePayable;
-     287         [ #  # ]:          0 :         if (_amount > maxDust) _amount = maxDust;
-     288                 :          0 :         SafeTransferLib.safeTransferETH(owner(), _amount);
-     289                 :          0 :         emit RelayWithdrawDust(owner(), _amount);
-     290                 :            :     }
-     291                 :            : 
-     292                 :            :     /// @notice Withdraws stuck matic
-     293                 :            :     /// @dev In the event something went really wrong / vuln report
-     294                 :            :     /// @dev When out of beta role will be moved to gnosis multisig for added safety
-     295                 :            :     /// @param _amount Amount to send to owner
-     296                 :            :     function withdrawStuckNativeToken(uint256 _amount)
-     297                 :            :         external
-     298                 :            :         onlyOwner
-     299                 :            :         nonReentrant
-     300                 :            :     {
-     301         [ #  # ]:          0 :         if (address(this).balance >= _amount) {
-     302                 :          0 :             SafeTransferLib.safeTransferETH(owner(), _amount);
-     303                 :          0 :             emit RelayWithdrawStuckNativeToken(owner(), _amount);
-     304                 :            :         }
-     305                 :            :     }
-     306                 :            : 
-     307                 :            :     /// @notice Withdraws stuck ERC20
-     308                 :            :     /// @dev In the event people send ERC20 instead of Matic we can send them back 
-     309                 :            :     /// @param _tokenAddress Address of the stuck token
-     310                 :            :     function withdrawStuckERC20(address _tokenAddress)
-     311                 :            :         external
-     312                 :            :         onlyOwner
-     313                 :            :         nonReentrant
-     314                 :            :     {
-     315                 :          0 :         ERC20 oopsToken = ERC20(_tokenAddress);
-     316                 :          0 :         uint256 oopsTokenBalance = oopsToken.balanceOf(address(this));
-     317                 :            : 
-     318         [ #  # ]:          0 :         if (oopsTokenBalance > 0) {
-     319                 :          0 :             SafeTransferLib.safeTransferFrom(oopsToken, address(this), owner(), oopsTokenBalance);
-     320                 :          0 :             emit RelayWithdrawStuckERC20(address(this), owner(), oopsTokenBalance);
-     321                 :            :         }
-     322                 :            :     }
-     323                 :            : 
-     324                 :            :     /***********************************|
-     325                 :            :     |          Validator Functions      |
-     326                 :            :     |__________________________________*/
-     327                 :            : 
-     328                 :            :     /// @notice Pays the validator their outstanding balance
-     329                 :            :     /// @dev Callable by either validator address, their payee address (if not changed recently), or PFL.
-     330                 :            :     /// @param _validator Validator address
-     331                 :            :     function payValidator(address _validator) external whenNotPaused nonReentrant onlyValidatorProxy(_validator) returns (uint256) {        
-     332                 :          2 :         uint256 payableBalance = validatorsBalanceMap[_validator];
-     333         [ +  + ]:          2 :         if (payableBalance > 0) {
-     334                 :          1 :             validatorsTotal -= validatorsBalanceMap[_validator];
-     335                 :          1 :             validatorsBalanceMap[_validator] = 0;
-     336                 :          1 :             SafeTransferLib.safeTransferETH(
-     337                 :            :                 _validatorPayee(_validator), 
-     338                 :            :                 payableBalance
-     339                 :            :             );
-     340                 :          1 :             emit RelayProcessingPaidValidator(_validator, payableBalance, msg.sender);
-     341                 :            :         }
-     342                 :          2 :         return payableBalance;
-     343                 :            :     }
-     344                 :            : 
-     345                 :            :     /// @notice Updates a validator payee
-     346                 :            :     /// @dev Callable by either validator address, their payee address (if not changed recently), or PFL.
-     347                 :            :     /// @param _validator Validator address
-     348                 :            :     function updateValidatorPayee(address _validator, address _payee) external onlyValidatorProxy(_validator) nonReentrant {
-     349         [ #  + ]:          1 :         if (_payee == address(0)) revert RelayCannotBeZero();
-     350         [ #  + ]:          1 :         if (_payee == address(this)) revert RelayCannotBeSelf();
-     351         [ #  + ]:          1 :         if (!validatorsStatusMap[_validator]) revert RelayPermissionNotFastlaneValidator();
-     352                 :          1 :         validatorsDataMap[_validator].payee = _payee;
-     353                 :          1 :         validatorsDataMap[_validator].timeUpdated = block.timestamp;
-     354                 :            : 
-     355                 :          1 :         emit RelayValidatorPayeeUpdated(_validator, _payee, msg.sender);   
-     356                 :            :     }
-     357                 :            : 
-     358                 :            :     function _isPayeeNotTimeLocked(address _validator) internal view returns (bool _valid) {
-     359                 :          3 :         _valid = block.timestamp > validatorsDataMap[_validator].timeUpdated + BLOCK_TIMELOCK;
-     360                 :            :     }
-     361                 :            : 
-     362                 :            :     function _isValidPayee(address _validator, address _payee) internal view returns (bool _valid) {
-     363                 :          2 :         _valid = _isPayeeNotTimeLocked(_validator) && _payee == validatorsDataMap[_validator].payee;
-     364                 :            :     }
-     365                 :            : 
-     366                 :            :     function _validatorPayee(address _validator) internal view returns (address _recipient) {
-     367                 :          1 :         _recipient = _isPayeeNotTimeLocked(_validator) ? validatorsDataMap[_validator].payee : _validator;
-     368                 :            :     }
-     369                 :            : 
-     370                 :            :     /***********************************|
-     371                 :            :     |             Public                |
-     372                 :            :     |__________________________________*/
-     373                 :            : 
-     374                 :            :     /// @notice Activates a pending stake share update
-     375                 :            :     /// @dev Anyone can call it after a 6 days delay
-     376                 :            :     function triggerPendingStakeShareUpdate() external nonReentrant {
-     377         [ #  # ]:          0 :         if (!pendingStakeShareUpdate || block.timestamp < proposalDeadline) revert RelayTimeUnsuitable();
-     378                 :          0 :         flStakeShareRatio = proposalStakeShareRatio;
-     379                 :          0 :         pendingStakeShareUpdate = false;
-     380                 :          0 :         emit RelayShareSet(proposalStakeShareRatio);
-     381                 :            :     }
-     382                 :            : 
-     383                 :            :     /// @notice Returns validator pending balance
-     384                 :            :     function getValidatorBalance(address _validator) public view returns (uint256 _validatorBalance) {
-     385                 :          2 :         _validatorBalance = validatorsBalanceMap[_validator];
-     386                 :            :     }
-     387                 :            : 
-     388                 :            :     /// @notice Returns the listed payee address regardless of whether or not it has passed the time lock.
-     389                 :            :     function getValidatorPayee(address _validator) public view returns (address _payee) {
-     390                 :          0 :         _payee = validatorsDataMap[_validator].payee;
-     391                 :            :     }
-     392                 :            : 
-     393                 :            :     /// @notice For validators to determine where their payments will go
-     394                 :            :     /// @dev Will return the Payee if blockTimeLock has passed, will return Validator if not.
-     395                 :            :     /// @param _validator Address
-     396                 :            :     function getValidatorRecipient(address _validator) public view returns (address _recipient) {
-     397                 :          0 :         _recipient = _validatorPayee(_validator);
-     398                 :            :     }
-     399                 :            : 
-     400                 :            :     function getCurrentStakeRatio() public view returns (uint24) {
-     401                 :          0 :         return flStakeShareRatio;
-     402                 :            :     }
-     403                 :            : 
-     404                 :            :     function getCurrentStakeBalance() public view returns (uint256) {
-     405                 :          2 :        return flStakeSharePayable;
-     406                 :            :     }
-     407                 :            : 
-     408                 :            :     function getPendingStakeRatio() public view returns (uint24 _fastLaneStakeShare) {
-     409                 :          0 :         _fastLaneStakeShare = pendingStakeShareUpdate ? proposalStakeShareRatio : flStakeShareRatio;
-     410                 :            :     }
-     411                 :            : 
-     412                 :            :     function getPendingDeadline() public view returns (uint256 _timeDeadline) {
-     413                 :          0 :         _timeDeadline = pendingStakeShareUpdate ? proposalDeadline : block.timestamp;
-     414                 :            :     }
-     415                 :            : 
-     416                 :            :     function getValidatorStatus(address _validator) public view returns (bool) {
-     417                 :          0 :         return validatorsStatusMap[_validator];
-     418                 :            :     }
-     419                 :            : 
-     420                 :            :     function humanizeError(bytes memory _errorData) public pure returns (string memory decoded) {
-     421                 :          2 :         uint256 len = _errorData.length;
-     422                 :          2 :         bytes memory firstPass = abi.decode(slice(_errorData, 4, len-4), (bytes));
-     423                 :          2 :         decoded = abi.decode(slice(firstPass, 4, firstPass.length-4), (string));
-     424                 :            :     }
-     425                 :            : 
-     426                 :            :     function slice(
-     427                 :            :         bytes memory _bytes,
-     428                 :            :         uint256 _start,
-     429                 :            :         uint256 _length
-     430                 :            :     )
-     431                 :            :         internal
-     432                 :            :         pure
-     433                 :            :         returns (bytes memory)
-     434                 :            :     {
-     435         [ #  + ]:          4 :         require(_length + 31 >= _length, "slice_overflow");
-     436         [ #  + ]:          4 :         require(_bytes.length >= _start + _length, "slice_outOfBounds");
-     437                 :            : 
-     438                 :          4 :         bytes memory tempBytes;
-     439                 :            : 
-     440                 :            :         assembly {
-     441                 :            :             switch iszero(_length)
-     442                 :            :             case 0 {
-     443                 :            :                 // Get a location of some free memory and store it in tempBytes as
-     444                 :            :                 // Solidity does for memory variables.
-     445                 :            :                 tempBytes := mload(0x40)
-     446                 :            : 
-     447                 :            :                 // The first word of the slice result is potentially a partial
-     448                 :            :                 // word read from the original array. To read it, we calculate
-     449                 :            :                 // the length of that partial word and start copying that many
-     450                 :            :                 // bytes into the array. The first word we copy will start with
-     451                 :            :                 // data we don't care about, but the last `lengthmod` bytes will
-     452                 :            :                 // land at the beginning of the contents of the new array. When
-     453                 :            :                 // we're done copying, we overwrite the full first word with
-     454                 :            :                 // the actual length of the slice.
-     455                 :            :                 let lengthmod := and(_length, 31)
-     456                 :            : 
-     457                 :            :                 // The multiplication in the next line is necessary
-     458                 :            :                 // because when slicing multiples of 32 bytes (lengthmod == 0)
-     459                 :            :                 // the following copy loop was copying the origin's length
-     460                 :            :                 // and then ending prematurely not copying everything it should.
-     461                 :            :                 let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)))
-     462                 :            :                 let end := add(mc, _length)
-     463                 :            : 
-     464                 :            :                 for {
-     465                 :            :                     // The multiplication in the next line has the same exact purpose
-     466                 :            :                     // as the one above.
-     467                 :            :                     let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start)
-     468                 :            :                 } lt(mc, end) {
-     469                 :            :                     mc := add(mc, 0x20)
-     470                 :            :                     cc := add(cc, 0x20)
-     471                 :            :                 } {
-     472                 :            :                     mstore(mc, mload(cc))
-     473                 :            :                 }
-     474                 :            : 
-     475                 :            :                 mstore(tempBytes, _length)
-     476                 :            : 
-     477                 :            :                 //update free-memory pointer
-     478                 :            :                 //allocating the array padded to 32 bytes like the compiler does now
-     479                 :            :                 mstore(0x40, and(add(mc, 31), not(31)))
-     480                 :            :             }
-     481                 :            :             //if we want a zero-length slice let's just return a zero-length array
-     482                 :            :             default {
-     483                 :            :                 tempBytes := mload(0x40)
-     484                 :            :                 //zero out the 32 bytes slice we are about to return
-     485                 :            :                 //we need to do it because Solidity does not garbage collect
-     486                 :            :                 mstore(tempBytes, 0)
-     487                 :            : 
-     488                 :            :                 mstore(0x40, add(tempBytes, 0x20))
-     489                 :            :             }
-     490                 :            :         }
-     491                 :            : 
-     492                 :          4 :         return tempBytes;
-     493                 :            :     }
-     494                 :            : 
-     495                 :            :     /***********************************|
-     496                 :            :     |             Modifiers             |
-     497                 :            :     |__________________________________*/
-     498                 :            : 
-     499                 :            :     modifier whenNotPaused() {
-     500                 :            :         if (paused) revert RelayPermissionPaused();
-     501                 :            :         _;
-     502                 :            :     }
-     503                 :            : 
-     504                 :            :     modifier onlyEOA() {
-     505                 :            :         if (RESTRICT_EOA && msg.sender != tx.origin) revert RelayPermissionSenderNotOrigin();
-     506                 :            :         _;
-     507                 :            :     }
-     508                 :            : 
-     509                 :            :     modifier onlyParticipatingValidators() {
-     510                 :            :         if (!validatorsStatusMap[block.coinbase]) revert RelayPermissionNotFastlaneValidator();
-     511                 :            :         _;
-     512                 :            :     }
-     513                 :            : 
-     514                 :            :     modifier onlyValidatorProxy(address _validator) {
-     515                 :            :         if (msg.sender != _validator && msg.sender != owner() && !_isValidPayee(_validator, msg.sender)) revert RelayPermissionUnauthorized();
-     516                 :            :         _;
-     517                 :            :     }
-     518                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-relay/index-sort-b.html b/report/contracts/jit-relay/index-sort-b.html deleted file mode 100644 index 0db9470..0000000 --- a/report/contracts/jit-relay/index-sort-b.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-relay - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-relayHitTotalCoverage
Test:lcov.infoLines:549159.3 %
Date:2022-11-15 17:07:48Functions:153050.0 %
Branches:204247.6 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneRelay.sol -
59.3%59.3%
-
59.3 %54 / 9150.0 %15 / 3047.6 %20 / 42
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-relay/index-sort-f.html b/report/contracts/jit-relay/index-sort-f.html deleted file mode 100644 index 6f2cd3c..0000000 --- a/report/contracts/jit-relay/index-sort-f.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-relay - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-relayHitTotalCoverage
Test:lcov.infoLines:549159.3 %
Date:2022-11-15 17:07:48Functions:153050.0 %
Branches:204247.6 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneRelay.sol -
59.3%59.3%
-
59.3 %54 / 9150.0 %15 / 3047.6 %20 / 42
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-relay/index-sort-l.html b/report/contracts/jit-relay/index-sort-l.html deleted file mode 100644 index a61a44f..0000000 --- a/report/contracts/jit-relay/index-sort-l.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-relay - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-relayHitTotalCoverage
Test:lcov.infoLines:549159.3 %
Date:2022-11-15 17:07:48Functions:153050.0 %
Branches:204247.6 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneRelay.sol -
59.3%59.3%
-
59.3 %54 / 9150.0 %15 / 3047.6 %20 / 42
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-relay/index.html b/report/contracts/jit-relay/index.html deleted file mode 100644 index 32079c2..0000000 --- a/report/contracts/jit-relay/index.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-relay - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-relayHitTotalCoverage
Test:lcov.infoLines:549159.3 %
Date:2022-11-15 17:07:48Functions:153050.0 %
Branches:204247.6 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneRelay.sol -
59.3%59.3%
-
59.3 %54 / 9150.0 %15 / 3047.6 %20 / 42
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-searcher/FastLaneSearcherWrapper.sol.func-sort-c.html b/report/contracts/jit-searcher/FastLaneSearcherWrapper.sol.func-sort-c.html deleted file mode 100644 index 10f7bab..0000000 --- a/report/contracts/jit-searcher/FastLaneSearcherWrapper.sol.func-sort-c.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-searcher/FastLaneSearcherWrapper.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-searcher - FastLaneSearcherWrapper.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:232785.2 %
Date:2022-11-15 17:07:48Functions:71070.0 %
Branches:92437.5 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
FastLaneSearcherWrapper.0
FastLaneSearcherWrapper.isTrustedForwarder0
FastLaneSearcherWrapper.revokeFastLaneEOA0
FastLaneSearcherWrapper.approveFastLaneEOA1
FastLaneSearcherWrapper.safeTransferETH1
FastLaneSearcherWrapper.setPFLAuctionAddress1
SearcherContractExample.doFail1
SearcherContractExample.doStuff3
FastLaneSearcherWrapper.checkFastLaneEOA4
FastLaneSearcherWrapper.fastLaneCall5
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-searcher/FastLaneSearcherWrapper.sol.func.html b/report/contracts/jit-searcher/FastLaneSearcherWrapper.sol.func.html deleted file mode 100644 index 220e4eb..0000000 --- a/report/contracts/jit-searcher/FastLaneSearcherWrapper.sol.func.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-searcher/FastLaneSearcherWrapper.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-searcher - FastLaneSearcherWrapper.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:232785.2 %
Date:2022-11-15 17:07:48Functions:71070.0 %
Branches:92437.5 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
FastLaneSearcherWrapper.0
FastLaneSearcherWrapper.approveFastLaneEOA1
FastLaneSearcherWrapper.checkFastLaneEOA4
FastLaneSearcherWrapper.fastLaneCall5
FastLaneSearcherWrapper.isTrustedForwarder0
FastLaneSearcherWrapper.revokeFastLaneEOA0
FastLaneSearcherWrapper.safeTransferETH1
FastLaneSearcherWrapper.setPFLAuctionAddress1
SearcherContractExample.doFail1
SearcherContractExample.doStuff3
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-searcher/FastLaneSearcherWrapper.sol.gcov.html b/report/contracts/jit-searcher/FastLaneSearcherWrapper.sol.gcov.html deleted file mode 100644 index 3dcaf2a..0000000 --- a/report/contracts/jit-searcher/FastLaneSearcherWrapper.sol.gcov.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-searcher/FastLaneSearcherWrapper.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-searcher - FastLaneSearcherWrapper.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:232785.2 %
Date:2022-11-15 17:07:48Functions:71070.0 %
Branches:92437.5 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : //SPDX-License-Identifier: Unlicensed
-       2                 :            : pragma solidity ^0.8.16;
-       3                 :            : 
-       4                 :            : import { ReentrancyGuard } from "solmate/utils/ReentrancyGuard.sol";
-       5                 :            : import "openzeppelin-contracts/contracts/utils/Strings.sol";
-       6                 :            : 
-       7                 :            : abstract contract FastLaneSearcherWrapper is ReentrancyGuard {
-       8                 :            : 
-       9                 :            :     address public owner;
-      10                 :            :     address payable private PFLAuction;
-      11                 :            : 
-      12                 :            :     error WrongPermissions();
-      13                 :            :     error OriginEOANotOwner();
-      14                 :            :     error SearcherCallUnsuccessful(bytes retData);
-      15                 :            :     error SearcherInsufficientFunds(uint256 amountToSend, uint256 currentBalance);
-      16                 :            : 
-      17                 :            :     mapping(address => bool) internal approvedEOAs;
-      18                 :            : 
-      19                 :            :     constructor() {
-      20                 :            :         owner = msg.sender;
-      21                 :            :     }
-      22                 :            : 
-      23                 :            :     // The FastLane Auction contract will call this function
-      24                 :            :     // The `onlyRelayer` modifier makes sure the calls can only come from PFL or will revert
-      25                 :            :     // PFL will pass along the original msg.sender as _sender for the searcher to do additional checks
-      26                 :            :     // Do NOT forget `onlyRelayer` and `checkFastLaneEOA(_sender);` or ANYONE will be able to call your contract with arbitrary calldata
-      27                 :            :     function fastLaneCall(
-      28                 :            :             address _sender, // Relay will always set this to msg.sender that called it. Ideally you (owner) or an approvedEOA.
-      29                 :            :             uint256 _bidAmount,
-      30                 :            :             bytes calldata _searcherCallData // contains func selector and calldata for your MEV transaction ie: abi.encodeWithSignature("doStuff(address,uint256)", 0xF00, 1212);
-      31                 :            :     ) external payable onlyRelayer nonReentrant returns (bool, bytes memory) {
-      32                 :            :         
-      33                 :            :         // Make sure it's your own EOA that's calling your contract 
-      34                 :          4 :         checkFastLaneEOA(_sender);
-      35                 :            : 
-      36                 :            :         // Execute the searcher's intended function
-      37                 :          4 :         (bool success, bytes memory returnedData) = address(this).call(_searcherCallData);
-      38                 :            :         
-      39                 :            :         // If the call didn't turn out the way you wanted, revert either here or inside your MEV function itself
-      40         [ +  + ]:          4 :         if (!success) {
-      41                 :          1 :             return (false, returnedData);
-      42                 :            :         }
-      43                 :            : 
-      44                 :            :         // Balance check then Repay PFL at the end
-      45         [ +  + ]:          3 :         require(
-      46                 :            :             (address(this).balance >= _bidAmount), 
-      47                 :            :             string(abi.encodePacked("SearcherInsufficientFunds  ", Strings.toString(_bidAmount), " ", Strings.toString(address(this).balance)))
-      48                 :            :         );
-      49                 :            : 
-      50                 :          1 :         safeTransferETH(PFLAuction, _bidAmount);
-      51                 :            :         
-      52                 :            :         // Return the return data (optional)
-      53                 :          1 :         return (success, returnedData);
-      54                 :            :     }
-      55                 :            : 
-      56                 :            :     // Other functions / modifiers that are necessary for FastLane integration:
-      57                 :            :     // NOTE: you can use your own versions of these, or find alternative ways
-      58                 :            :     // to implement similar safety checks. Please be careful when altering!
-      59                 :            :     function safeTransferETH(address to, uint256 amount) internal {
-      60                 :          1 :         bool success;
-      61                 :            : 
-      62                 :            :         assembly {
-      63                 :            :             // Transfer the ETH and store if it succeeded or not.
-      64                 :          1 :             success := call(gas(), to, amount, 0, 0, 0, 0)
-      65                 :            :         }
-      66                 :            : 
-      67         [ #  + ]:          1 :         require(success, "ETH_TRANSFER_FAILED");
-      68                 :            :     }
-      69                 :            : 
-      70                 :            :     function setPFLAuctionAddress(address _pflAuction) public {
-      71         [ #  + ]:          1 :         require(msg.sender == owner, "OriginEOANotOwner");
-      72                 :          1 :         PFLAuction = payable(_pflAuction);
-      73                 :            :     }
-      74                 :            : 
-      75                 :            :     function approveFastLaneEOA(address _eoaAddress) public {
-      76         [ #  + ]:          1 :         require(msg.sender == owner, "OriginEOANotOwner");
-      77                 :          1 :         approvedEOAs[_eoaAddress] = true;
-      78                 :            :     }
-      79                 :            : 
-      80                 :            :     function revokeFastLaneEOA(address _eoaAddress) public {
-      81         [ #  # ]:          0 :         require(msg.sender == owner, "OriginEOANotOwner");
-      82                 :          0 :         approvedEOAs[_eoaAddress] = false;
-      83                 :            :     }
-      84                 :            : 
-      85                 :            :     function checkFastLaneEOA(address _eoaAddress) view internal {
-      86         [ #  + ]:          4 :         require(approvedEOAs[_eoaAddress] || _eoaAddress == owner, "SenderEOANotApproved");
-      87                 :            :     }
-      88                 :            : 
-      89                 :            :     function isTrustedForwarder(address _forwarder) public view returns (bool) {
-      90                 :          5 :         return _forwarder == PFLAuction;
-      91                 :            :     }
-      92                 :            : 
-      93                 :            :     // Be aware with a fallback fn that:
-      94                 :            :     // `address(this).call(_searcherCallData);` 
-      95                 :            :     // Will hit this if _searcherCallData function is not implemented. 
-      96                 :            :     // And success will be true.
-      97                 :            :     fallback() external payable {
-      98                 :            :         
-      99                 :            :     }
-     100                 :            :     receive() external payable {}
-     101                 :            : 
-     102                 :            :     modifier onlyRelayer {
-     103                 :            :           if (!isTrustedForwarder(msg.sender)) revert("InvalidPermissions");
-     104                 :            :           _;
-     105                 :            :      }
-     106                 :            : }
-     107                 :            : 
-     108                 :            : contract SearcherContractExample is FastLaneSearcherWrapper {
-     109                 :            :     // Your own MEV contract / functions here 
-     110                 :            :     // NOTE: its security checks must be compatible w/ calls from the FastLane Auction Contract
-     111                 :            : 
-     112                 :            :     address public anAddress; // just a var to change for the placeholder MEV function
-     113                 :            :     uint256 public anAmount; // another var to change for the placeholder MEV function
-     114                 :            : 
-     115                 :            :     function doStuff(address _anAddress, uint256 _anAmount) public payable returns (bool) {
-     116                 :            :         // NOTE: this function can't be external as the FastLaneCall func will call it internally
-     117         [ #  # ]:          3 :         if (msg.sender != address(this)) { 
-     118                 :            :             // NOTE: msg.sender becomes address(this) if using call from inside contract per above example in `fasfastLaneCall`
-     119         [ #  # ]:          0 :             require(approvedEOAs[msg.sender], "SenderEOANotApproved");
-     120                 :            :         }
-     121                 :            :         
-     122                 :            :         // Do MEV stuff here
-     123                 :            :         // placeholder
-     124                 :          3 :         anAddress = _anAddress;
-     125                 :          3 :         anAmount = _anAmount;
-     126                 :          3 :         bool isSuccessful = true;
-     127                 :          3 :         return isSuccessful;
-     128                 :            :     }
-     129                 :            : 
-     130                 :            :     function doFail() public payable {
-     131         [ #  # ]:          1 :         if (msg.sender != address(this)) { 
-     132                 :            :             // NOTE: msg.sender becomes address(this) if using call from inside contract per above example in `fasfastLaneCall`
-     133         [ #  # ]:          0 :             require(approvedEOAs[msg.sender], "SenderEOANotApproved");
-     134                 :            :         }
-     135                 :            :         // Will cause Error(string) of: 0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000f4641494c5f4f4e5f505552504f53450000000000000000000000000000000000
-     136                 :            :         // to bubble up to the relay contract.
-     137                 :            :         // Use the read function `FastLaneRelay.humanizeError(bytes error)` to get a human readable version of an error should your searcher contract fail on a require.
-     138         [ +  # ]:          1 :         require(false,"FAIL_ON_PURPOSE");
-     139                 :            :     }
-     140                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-searcher/MinimalSearcherContractContextOwnable.sol.func-sort-c.html b/report/contracts/jit-searcher/MinimalSearcherContractContextOwnable.sol.func-sort-c.html deleted file mode 100644 index 51b95b6..0000000 --- a/report/contracts/jit-searcher/MinimalSearcherContractContextOwnable.sol.func-sort-c.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-searcher/MinimalSearcherContractContextOwnable.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-searcher - MinimalSearcherContractContextOwnable.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:3475.0 %
Date:2022-09-13 05:18:59Functions:2450.0 %
Branches:1250.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
MinimalSearcherContractContextOwnable.0
MinimalSearcherContractContextOwnable._msgData0
MinimalSearcherContractContextOwnable._msgSender2
MinimalSearcherContractContextOwnable.doMEV2
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-searcher/MinimalSearcherContractContextOwnable.sol.func.html b/report/contracts/jit-searcher/MinimalSearcherContractContextOwnable.sol.func.html deleted file mode 100644 index 933bc53..0000000 --- a/report/contracts/jit-searcher/MinimalSearcherContractContextOwnable.sol.func.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-searcher/MinimalSearcherContractContextOwnable.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-searcher - MinimalSearcherContractContextOwnable.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:3475.0 %
Date:2022-09-13 05:18:59Functions:2450.0 %
Branches:1250.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
MinimalSearcherContractContextOwnable.0
MinimalSearcherContractContextOwnable._msgData0
MinimalSearcherContractContextOwnable._msgSender2
MinimalSearcherContractContextOwnable.doMEV2
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-searcher/MinimalSearcherContractContextOwnable.sol.gcov.html b/report/contracts/jit-searcher/MinimalSearcherContractContextOwnable.sol.gcov.html deleted file mode 100644 index 9501837..0000000 --- a/report/contracts/jit-searcher/MinimalSearcherContractContextOwnable.sol.gcov.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-searcher/MinimalSearcherContractContextOwnable.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-searcher - MinimalSearcherContractContextOwnable.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:3475.0 %
Date:2022-09-13 05:18:59Functions:2450.0 %
Branches:1250.0 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : pragma solidity ^0.8.16;
-       2                 :            : 
-       3                 :            : import "openzeppelin-contracts/contracts//access/Ownable.sol";
-       4                 :            : import { ERC2771Context } from "openzeppelin-contracts/contracts/metatx/ERC2771Context.sol";
-       5                 :            : import { SafeTransferLib } from "solmate/utils/SafeTransferLib.sol";
-       6                 :            : 
-       7                 :            : contract MinimalSearcherContractContextOwnable is ERC2771Context, Ownable {
-       8                 :            : 
-       9                 :            :      error WrongPermissions();
-      10                 :            :      error OriginEOANotOwner();
-      11                 :            : 
-      12                 :            :      address private PFLRepayAddress;
-      13                 :            : 
-      14                 :            :      using SafeTransferLib for address payable;
-      15                 :            : 
-      16                 :            :      constructor(address _relayer, address _PFLRepayAddress) ERC2771Context(_relayer) {
-      17                 :            :           require(_relayer != address(0) && _PFLRepayAddress != address(0),"MSCCO-C0");
-      18                 :            :           PFLRepayAddress = _PFLRepayAddress;
-      19                 :            :      }
-      20                 :            : 
-      21                 :            :      // Can receive ETH
-      22                 :            :      fallback() external payable {}
-      23                 :            : 
-      24                 :            :      function doMEV(address payable callTo, uint256 flags, uint256 _paybackAmount, bytes calldata params) external payable onlyRelayer {
-      25                 :            : 
-      26                 :            :           // In a relayed context _msgSender() will point back to the EOA that signed the searcherTX
-      27                 :            :           // as the normal `msg.sender` points to the relayer.
-      28                 :            :           // see https://ethereum.stackexchange.com/questions/99250/understanding-openzeppelins-context-contract
-      29         [ #  + ]:          2 :           if (_msgSender() != owner()) revert OriginEOANotOwner();
-      30                 :            : 
-      31                 :            :           /* 
-      32                 :            :                ...
-      33                 :            :                Do whatever you want here, call your usual searcher contract, use msg.data
-      34                 :            :                or do the swaps / multicall from inside this one.
-      35                 :            :                `msg.sender` will be your SearcherMinimalContract
-      36                 :            :                ...
-      37                 :            :           */
-      38                 :            :           
-      39                 :            :           // MySearcherMEVContract.call(callTo, flags, params);
-      40                 :            : 
-      41                 :            :           // Repay PFL at the end
-      42                 :          2 :           payable(PFLRepayAddress).safeTransferETH(_paybackAmount);
-      43                 :            :      }
-      44                 :            : 
-      45                 :            :      function _msgSender() internal view override(ERC2771Context, Context) returns (address sender) {
-      46                 :          2 :           return ERC2771Context._msgSender();
-      47                 :            :      }
-      48                 :            : 
-      49                 :            :      function _msgData() internal view override(ERC2771Context, Context) returns (bytes calldata) {
-      50                 :          0 :           return ERC2771Context._msgData();
-      51                 :            :      }
-      52                 :            : 
-      53                 :            :      modifier onlyRelayer {
-      54                 :            :           if (!isTrustedForwarder(msg.sender)) revert WrongPermissions();
-      55                 :            :           _;
-      56                 :            :      }
-      57                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-searcher/MinimalSearcherRawContract.sol.func-sort-c.html b/report/contracts/jit-searcher/MinimalSearcherRawContract.sol.func-sort-c.html deleted file mode 100644 index 83d5c22..0000000 --- a/report/contracts/jit-searcher/MinimalSearcherRawContract.sol.func-sort-c.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-searcher/MinimalSearcherRawContract.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-searcher - MinimalSearcherRawContract.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:91090.0 %
Date:2022-09-13 05:18:59Functions:3560.0 %
Branches:3650.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
SearcherMinimalRawContract.0
SearcherMinimalRawContract.isTrustedForwarder0
SearcherMinimalRawContract._msgSender1
SearcherMinimalRawContract.doMEV1
SearcherMinimalRawContract.safeTransferETH1
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-searcher/MinimalSearcherRawContract.sol.func.html b/report/contracts/jit-searcher/MinimalSearcherRawContract.sol.func.html deleted file mode 100644 index b395e11..0000000 --- a/report/contracts/jit-searcher/MinimalSearcherRawContract.sol.func.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-searcher/MinimalSearcherRawContract.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-searcher - MinimalSearcherRawContract.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:91090.0 %
Date:2022-09-13 05:18:59Functions:3560.0 %
Branches:3650.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
SearcherMinimalRawContract.0
SearcherMinimalRawContract._msgSender1
SearcherMinimalRawContract.doMEV1
SearcherMinimalRawContract.isTrustedForwarder0
SearcherMinimalRawContract.safeTransferETH1
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-searcher/MinimalSearcherRawContract.sol.gcov.html b/report/contracts/jit-searcher/MinimalSearcherRawContract.sol.gcov.html deleted file mode 100644 index cbb348b..0000000 --- a/report/contracts/jit-searcher/MinimalSearcherRawContract.sol.gcov.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-searcher/MinimalSearcherRawContract.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-searcher - MinimalSearcherRawContract.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:91090.0 %
Date:2022-09-13 05:18:59Functions:3560.0 %
Branches:3650.0 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : pragma solidity ^0.8.16;
-       2                 :            : 
-       3                 :            : 
-       4                 :            : contract SearcherMinimalRawContract {
-       5                 :            : 
-       6                 :            :     address private owner;
-       7                 :            :     address payable private PFLRepayAddress;
-       8                 :            :     address private relayer;
-       9                 :            : 
-      10                 :            :     error WrongPermissions();
-      11                 :            :     error OriginEOANotOwner();
-      12                 :            : 
-      13                 :            :     constructor(address _relayer, address _PFLRepayAddress) {
-      14                 :            :         relayer = _relayer; // PFL Relayer
-      15                 :            :         owner = msg.sender;
-      16                 :            :         PFLRepayAddress = payable(_PFLRepayAddress);
-      17                 :            :     }
-      18                 :            : 
-      19                 :            :     // You choose your params as you want,
-      20                 :            :     // You will declare them in the `submitBid` transaction to PFL
-      21                 :            :     function doMEV(uint256 _paymentAmount, address _target, bytes calldata _encodedCall) external payable onlyRelayer {
-      22                 :            : 
-      23                 :            :         // In a relayed context _msgSender() will point back to the EOA that signed the searcherTX
-      24                 :            :         // as the normal `msg.sender` points to the relayer.
-      25                 :            :         // see https://ethereum.stackexchange.com/questions/99250/understanding-openzeppelins-context-contract
-      26         [ #  + ]:          1 :         if (_msgSender() != owner) revert OriginEOANotOwner();
-      27                 :            : 
-      28                 :            :         /* 
-      29                 :            :             ...
-      30                 :            :             Do whatever you want here, call your usual searcher contract, use msg.data
-      31                 :            :             or do the swaps / multicall from inside this one.
-      32                 :            :             `msg.sender` will be your SearcherMinimalContract
-      33                 :            :             ...
-      34                 :            :         */
-      35                 :            :         
-      36                 :            :         // MySearcherMEVContract.call(whatever); or
-      37                 :            :         // Someopportunity.call(whatever)
-      38                 :          1 :         _target.call(_encodedCall);
-      39                 :            :         // Repay PFL at the end
-      40                 :          1 :         safeTransferETH(PFLRepayAddress, _paymentAmount);
-      41                 :            :     }
-      42                 :            : 
-      43                 :            :     function _msgSender() internal view returns (address sender) {
-      44         [ +  # ]:          1 :         if (isTrustedForwarder(msg.sender)) {
-      45                 :            :             // The assembly code is more direct than the Solidity version using `abi.decode`.
-      46                 :            :             /// @solidity memory-safe-assembly
-      47                 :            :             assembly {
-      48                 :          1 :                 sender := shr(96, calldataload(sub(calldatasize(), 20)))
-      49                 :            :             }
-      50                 :            :         } else {
-      51                 :          0 :             return msg.sender;
-      52                 :            :         }
-      53                 :            :     }
-      54                 :            : 
-      55                 :            :     // Can receive ETH
-      56                 :            :     fallback() external payable {}
-      57                 :            : 
-      58                 :            :     function isTrustedForwarder(address forwarder) public view returns (bool) {
-      59                 :          2 :         return forwarder == relayer;
-      60                 :            :     }
-      61                 :            : 
-      62                 :            :     function safeTransferETH(address to, uint256 amount) internal {
-      63                 :          1 :         bool success;
-      64                 :            : 
-      65                 :            :         assembly {
-      66                 :            :             // Transfer the ETH and store if it succeeded or not.
-      67                 :          1 :             success := call(gas(), to, amount, 0, 0, 0, 0)
-      68                 :            :         }
-      69                 :            : 
-      70         [ #  + ]:          1 :         require(success, "ETH_TRANSFER_FAILED");
-      71                 :            :     }
-      72                 :            : 
-      73                 :            :     modifier onlyRelayer {
-      74                 :            :           if (!isTrustedForwarder(msg.sender)) revert WrongPermissions();
-      75                 :            :           _;
-      76                 :            :      }
-      77                 :            : 
-      78                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-searcher/index-sort-b.html b/report/contracts/jit-searcher/index-sort-b.html deleted file mode 100644 index 85d5fbf..0000000 --- a/report/contracts/jit-searcher/index-sort-b.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-searcher - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-searcherHitTotalCoverage
Test:lcov.infoLines:232785.2 %
Date:2022-11-15 17:07:48Functions:71070.0 %
Branches:92437.5 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneSearcherWrapper.sol -
85.2%85.2%
-
85.2 %23 / 2770.0 %7 / 1037.5 %9 / 24
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-searcher/index-sort-f.html b/report/contracts/jit-searcher/index-sort-f.html deleted file mode 100644 index a3ec632..0000000 --- a/report/contracts/jit-searcher/index-sort-f.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-searcher - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-searcherHitTotalCoverage
Test:lcov.infoLines:232785.2 %
Date:2022-11-15 17:07:48Functions:71070.0 %
Branches:92437.5 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneSearcherWrapper.sol -
85.2%85.2%
-
85.2 %23 / 2770.0 %7 / 1037.5 %9 / 24
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-searcher/index-sort-l.html b/report/contracts/jit-searcher/index-sort-l.html deleted file mode 100644 index 6b8154d..0000000 --- a/report/contracts/jit-searcher/index-sort-l.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-searcher - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-searcherHitTotalCoverage
Test:lcov.infoLines:232785.2 %
Date:2022-11-15 17:07:48Functions:71070.0 %
Branches:92437.5 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneSearcherWrapper.sol -
85.2%85.2%
-
85.2 %23 / 2770.0 %7 / 1037.5 %9 / 24
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/jit-searcher/index.html b/report/contracts/jit-searcher/index.html deleted file mode 100644 index 4fac6ea..0000000 --- a/report/contracts/jit-searcher/index.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/jit-searcher - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/jit-searcherHitTotalCoverage
Test:lcov.infoLines:232785.2 %
Date:2022-11-15 17:07:48Functions:71070.0 %
Branches:92437.5 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneSearcherWrapper.sol -
85.2%85.2%
-
85.2 %23 / 2770.0 %7 / 1037.5 %9 / 24
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/legacy/FastLaneLegacyAuction.sol.func-sort-c.html b/report/contracts/legacy/FastLaneLegacyAuction.sol.func-sort-c.html deleted file mode 100644 index c46d9d8..0000000 --- a/report/contracts/legacy/FastLaneLegacyAuction.sol.func-sort-c.html +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/legacy/FastLaneLegacyAuction.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/legacy - FastLaneLegacyAuction.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:178178100.0 %
Date:2023-09-07 01:01:29Functions:4343100.0 %
Branches:707494.6 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
FastLaneLegacyAuction._authorizeUpgrade1
FastLaneLegacyAuction.findLastFinalizedAuctionWinner1
FastLaneLegacyAuction.getPreferences1
FastLaneLegacyAuction.initialize1
FastLaneLegacyAuction.setBidToken1
FastLaneLegacyAuction.setPausedState1
FastLaneLegacyAuction.setStarter1
FastLaneLegacyAuction.withdrawStuckNativeToken1
FastLaneLegacyAuction.disableValidatorAddress2
FastLaneLegacyAuction.findFinalizedAuctionWinnerAtAuction2
FastLaneLegacyAuction.findLiveAuctionTopBid2
FastLaneLegacyAuction.getActivePrivilegesAuctionNumber2
FastLaneLegacyAuction.getStatus2
FastLaneLegacyAuction.initialSetupAuction2
FastLaneLegacyAuction.setMinimumBidIncrement2
FastLaneLegacyAuction.setOffchainCheckerDisabledState2
FastLaneLegacyAuction.setOps2
FastLaneLegacyAuction.setResolverMaxGasPrice2
FastLaneLegacyAuction.withdrawStuckERC202
FastLaneLegacyAuction.getValidatorsactiveAtAuctionRound3
FastLaneLegacyAuction.setAutopayBatchSize3
FastLaneLegacyAuction.disableOpportunityAddress4
FastLaneLegacyAuction.setMinimumAutoShipThreshold4
FastLaneLegacyAuction._refundPreviousBidder5
FastLaneLegacyAuction.processAutopayJobs5
FastLaneLegacyAuction.setValidatorPreferences5
FastLaneLegacyAuction.setFastlaneFee6
FastLaneLegacyAuction.enableValidatorAddressWithPreferences7
FastLaneLegacyAuction.getAutopayJobs7
FastLaneLegacyAuction._updateValidatorPreferences11
FastLaneLegacyAuction.redeemOutstandingBalance11
FastLaneLegacyAuction.getCheckpoint13
FastLaneLegacyAuction.enableValidatorAddress14
FastLaneLegacyAuction._redeemOutstanding16
FastLaneLegacyAuction.checker17
FastLaneLegacyAuction.enableOpportunityAddress17
FastLaneLegacyAuction._enableValidatorCheckpoint21
FastLaneLegacyAuction.endAuction21
FastLaneLegacyAuction.startAuction29
FastLaneLegacyAuction._receiveBid32
FastLaneLegacyAuction._calculateCuts41
FastLaneLegacyAuction.submitBid41
FastLaneLegacyAuction._checkRedeemableOutstanding47
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/legacy/FastLaneLegacyAuction.sol.func.html b/report/contracts/legacy/FastLaneLegacyAuction.sol.func.html deleted file mode 100644 index 4c12780..0000000 --- a/report/contracts/legacy/FastLaneLegacyAuction.sol.func.html +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/legacy/FastLaneLegacyAuction.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/legacy - FastLaneLegacyAuction.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:178178100.0 %
Date:2023-09-07 01:01:29Functions:4343100.0 %
Branches:707494.6 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
FastLaneLegacyAuction._authorizeUpgrade1
FastLaneLegacyAuction._calculateCuts41
FastLaneLegacyAuction._checkRedeemableOutstanding47
FastLaneLegacyAuction._enableValidatorCheckpoint21
FastLaneLegacyAuction._receiveBid32
FastLaneLegacyAuction._redeemOutstanding16
FastLaneLegacyAuction._refundPreviousBidder5
FastLaneLegacyAuction._updateValidatorPreferences11
FastLaneLegacyAuction.checker17
FastLaneLegacyAuction.disableOpportunityAddress4
FastLaneLegacyAuction.disableValidatorAddress2
FastLaneLegacyAuction.enableOpportunityAddress17
FastLaneLegacyAuction.enableValidatorAddress14
FastLaneLegacyAuction.enableValidatorAddressWithPreferences7
FastLaneLegacyAuction.endAuction21
FastLaneLegacyAuction.findFinalizedAuctionWinnerAtAuction2
FastLaneLegacyAuction.findLastFinalizedAuctionWinner1
FastLaneLegacyAuction.findLiveAuctionTopBid2
FastLaneLegacyAuction.getActivePrivilegesAuctionNumber2
FastLaneLegacyAuction.getAutopayJobs7
FastLaneLegacyAuction.getCheckpoint13
FastLaneLegacyAuction.getPreferences1
FastLaneLegacyAuction.getStatus2
FastLaneLegacyAuction.getValidatorsactiveAtAuctionRound3
FastLaneLegacyAuction.initialSetupAuction2
FastLaneLegacyAuction.initialize1
FastLaneLegacyAuction.processAutopayJobs5
FastLaneLegacyAuction.redeemOutstandingBalance11
FastLaneLegacyAuction.setAutopayBatchSize3
FastLaneLegacyAuction.setBidToken1
FastLaneLegacyAuction.setFastlaneFee6
FastLaneLegacyAuction.setMinimumAutoShipThreshold4
FastLaneLegacyAuction.setMinimumBidIncrement2
FastLaneLegacyAuction.setOffchainCheckerDisabledState2
FastLaneLegacyAuction.setOps2
FastLaneLegacyAuction.setPausedState1
FastLaneLegacyAuction.setResolverMaxGasPrice2
FastLaneLegacyAuction.setStarter1
FastLaneLegacyAuction.setValidatorPreferences5
FastLaneLegacyAuction.startAuction29
FastLaneLegacyAuction.submitBid41
FastLaneLegacyAuction.withdrawStuckERC202
FastLaneLegacyAuction.withdrawStuckNativeToken1
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/legacy/FastLaneLegacyAuction.sol.gcov.html b/report/contracts/legacy/FastLaneLegacyAuction.sol.gcov.html deleted file mode 100644 index d92506d..0000000 --- a/report/contracts/legacy/FastLaneLegacyAuction.sol.gcov.html +++ /dev/null @@ -1,1049 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/legacy/FastLaneLegacyAuction.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/legacy - FastLaneLegacyAuction.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:178178100.0 %
Date:2023-09-07 01:01:29Functions:4343100.0 %
Branches:707494.6 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : //SPDX-License-Identifier: Unlicensed
-       2                 :            : pragma solidity 0.8.16;
-       3                 :            : 
-       4                 :            : import "openzeppelin-contracts/contracts/utils/Address.sol";
-       5                 :            : import { SafeTransferLib, ERC20 } from "solmate/utils/SafeTransferLib.sol";
-       6                 :            : import { ReentrancyGuard } from "solmate/utils/ReentrancyGuard.sol";
-       7                 :            : import "openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol";
-       8                 :            : import "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol";
-       9                 :            : import "openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol";
-      10                 :            : import "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol";
-      11                 :            : 
-      12                 :            : 
-      13                 :            : /// @notice Auction bid struct
-      14                 :            : /// @dev Current owners need to allow opportunity and validator addresses to participate beforehands
-      15                 :            : /// @param validatorAddress Validator selected for the bid
-      16                 :            : /// @param opportunityAddress Opportunity selected for the bid
-      17                 :            : /// @param searcherContractAddress Contract that will be submitting transactions to `opportunityAddress`
-      18                 :            : /// @param searcherPayableAddress Searcher submitting the bid (currently restricted to msg.sender)
-      19                 :            : /// @param bidAmount Value of the bid
-      20                 :            : struct Bid {
-      21                 :            :     address validatorAddress;
-      22                 :            :     address opportunityAddress;
-      23                 :            :     address searcherContractAddress;
-      24                 :            :     address searcherPayableAddress;
-      25                 :            :     uint256 bidAmount;
-      26                 :            : }
-      27                 :            : 
-      28                 :            : /// @notice The type of a Status struct validator or opportunity
-      29                 :            : enum statusType {
-      30                 :            :     INVALID, // 0
-      31                 :            :     VALIDATOR, // 1 
-      32                 :            :     OPPORTUNITY // 2
-      33                 :            : }
-      34                 :            : 
-      35                 :            : /// @notice Status of validator or opportunity
-      36                 :            : /// @dev Status cannot be flipped for the current round, an opportunity or validator set up as inactive will always be able to receive bids until the end of the round it was triggered.
-      37                 :            : /// @param activeAtAuctionRound Auction round where entity will be enabled
-      38                 :            : /// @param inactiveAtAuctionRound Auction round at which entity will be disabled
-      39                 :            : /// @param kind From {statusType} 
-      40                 :            : struct Status {
-      41                 :            :     uint128 activeAtAuctionRound;
-      42                 :            :     uint128 inactiveAtAuctionRound;
-      43                 :            :     statusType kind;  
-      44                 :            : }
-      45                 :            : 
-      46                 :            : 
-      47                 :            : /// @notice Validator Balance Checkpoint
-      48                 :            : /// @dev By default checkpoints are checked every block by ops to see if there is amount to be paid ( > minAmount or > minAmoutForValidator)
-      49                 :            : /// @param pendingBalanceAtlastBid Deposits at `lastBidReceivedAuction`
-      50                 :            : /// @param outstandingBalance Balance accumulated between `lastWithdrawnAuction` and `lastBidReceivedAuction`
-      51                 :            : /// @param lastWithdrawnAuction Round when the validator withdrew
-      52                 :            : /// @param lastBidReceivedAuction Last auction around a bid was received for this validator
-      53                 :            : struct ValidatorBalanceCheckpoint {
-      54                 :            :     uint256 pendingBalanceAtlastBid;
-      55                 :            :     uint256 outstandingBalance;
-      56                 :            :     uint128 lastWithdrawnAuction;
-      57                 :            :     uint128 lastBidReceivedAuction;
-      58                 :            : }
-      59                 :            : 
-      60                 :            : /// @notice Validator Balances Shipping Preferences
-      61                 :            : /// @dev minAutoshipAmount will always be superseeded by contract level minAutoShipThreshold if lower
-      62                 :            : /// @param minAutoshipAmount Validator desired autoship threshold 
-      63                 :            : /// @param validatorPayableAddress Validator desired payable address
-      64                 :            : struct ValidatorPreferences {
-      65                 :            :     uint256 minAutoshipAmount;
-      66                 :            :     address validatorPayableAddress;
-      67                 :            : }
-      68                 :            : 
-      69                 :            : 
-      70                 :            : abstract contract FastLaneEvents {
-      71                 :            :     /***********************************|
-      72                 :            :     |             Events                |
-      73                 :            :     |__________________________________*/
-      74                 :            : 
-      75                 :            :     event MinimumBidIncrementSet(uint256 amount);
-      76                 :            :     event FastLaneFeeSet(uint256 amount);
-      77                 :            :     event BidTokenSet(address indexed token);
-      78                 :            :     event PausedStateSet(bool state);
-      79                 :            :     event OpsSet(address ops);
-      80                 :            :     event MinimumAutoshipThresholdSet(uint128 amount);
-      81                 :            :     event ResolverMaxGasPriceSet(uint128 amount);
-      82                 :            :     event AutopayBatchSizeSet(uint16 batch_size);
-      83                 :            :     event OpportunityAddressEnabled(
-      84                 :            :         address indexed opportunity,
-      85                 :            :         uint128 indexed auction_number
-      86                 :            :     );
-      87                 :            :     event OpportunityAddressDisabled(
-      88                 :            :         address indexed opportunity,
-      89                 :            :         uint128 indexed auction_number
-      90                 :            :     );
-      91                 :            :     event ValidatorAddressEnabled(
-      92                 :            :         address indexed validator,
-      93                 :            :         uint128 indexed auction_number
-      94                 :            :     );
-      95                 :            :     event ValidatorAddressDisabled(
-      96                 :            :         address indexed validator,
-      97                 :            :         uint128 indexed auction_number
-      98                 :            :     );
-      99                 :            :     event ValidatorWithdrawnBalance(
-     100                 :            :         address indexed validator,
-     101                 :            :         uint128 indexed auction_number,
-     102                 :            :         uint256 amount,
-     103                 :            :         address destination,
-     104                 :            :         address indexed caller
-     105                 :            : 
-     106                 :            :     );
-     107                 :            :     event AuctionStarted(uint128 indexed auction_number);
-     108                 :            : 
-     109                 :            :     event AuctionEnded(uint128 indexed auction_number);
-     110                 :            : 
-     111                 :            :     event AuctionStarterSet(address indexed starter);
-     112                 :            : 
-     113                 :            :     event WithdrawStuckERC20(
-     114                 :            :         address indexed receiver,
-     115                 :            :         address indexed token,
-     116                 :            :         uint256 amount
-     117                 :            :     );
-     118                 :            :     event WithdrawStuckNativeToken(address indexed receiver, uint256 amount);
-     119                 :            :    
-     120                 :            :     event BidAdded(
-     121                 :            :         address bidder,
-     122                 :            :         address indexed validator,
-     123                 :            :         address indexed opportunity,
-     124                 :            :         uint256 amount,
-     125                 :            :         uint256 indexed auction_number
-     126                 :            :     );
-     127                 :            : 
-     128                 :            :     event ValidatorPreferencesSet(address indexed validator, uint256 minAutoshipAmount, address validatorPayableAddress);
-     129                 :            : 
-     130                 :            :     error GeneralFailure();                            // E-000 // 0x2192efec
-     131                 :            : 
-     132                 :            :     error PermissionPaused();                          // E-101 // 0xeaa8b1af
-     133                 :            :     error PermissionNotOwner();                        // E-102 // 0xf599ea9e
-     134                 :            :     error PermissionOnlyFromPayorEoa();                // E-103 // 0x13272381
-     135                 :            :     error PermissionMustBeValidator();                 // E-104 // 0x4f4e9f3f
-     136                 :            :     error PermissionInvalidOpportunityAddress();       // E-105 // 0xcf440a8e
-     137                 :            :     error PermissionOnlyOps();                         // E-106 // 0x68da148f
-     138                 :            :     error PermissionNotOwnerNorStarter();              // E-107 // 0x8b4fb0bf
-     139                 :            :     error PermissionNotAllowed();                      // E-108 // 0xba6c5093
-     140                 :            : 
-     141                 :            :     error InequalityInvalidIndex();                    // E-201 // 0x102bd785
-     142                 :            :     error InequalityAddressMismatch();                 // E-202 // 0x17de231a
-     143                 :            :     error InequalityTooLow();                          // E-203 // 0x470b0adc
-     144                 :            :     error InequalityAlreadyTopBidder();                // E-204 // 0xeb14a775
-     145                 :            :     error InequalityNotEnoughFunds();                  // E-206 // 0x4587f24a
-     146                 :            :     error InequalityNothingToRedeem();                 // E-207 // 0x77a3b272
-     147                 :            :     error InequalityValidatorDisabledAtTime();         // E-209 // 0xa1ec46e6
-     148                 :            :     error InequalityOpportunityDisabledAtTime();       // E-210 // 0x8c81d8e9
-     149                 :            :     error InequalityValidatorNotEnabledYet();          // E-211 // 0x7a956c2e
-     150                 :            :     error InequalityOpportunityNotEnabledYet();        // E-212 // 0x333108d7
-     151                 :            :     error InequalityTooHigh();                         // E-213 // 0xfd11d092
-     152                 :            :     error InequalityWrongToken();                      // E-214 // 0xc9db890c
-     153                 :            : 
-     154                 :            :     error TimeNotWhenAuctionIsLive();                  // E-301 // 0x76a79c50
-     155                 :            :     error TimeNotWhenAuctionIsStopped();               // E-302 // 0x4eaf4896
-     156                 :            :     error TimeGasNotSuitable();                        // E-307 // 0xdd980aae
-     157                 :            :     error TimeAlreadyInit();                           // E-308 // 0xef34ca5c
-     158                 :            : 
-     159                 :            : }   
-     160                 :            : 
-     161                 :            : /// @title FastLaneAuction
-     162                 :            : /// @author Elyx0
-     163                 :            : /// @notice Fastlane.finance auction contract
-     164                 :            : contract FastLaneLegacyAuction is Initializable, OwnableUpgradeable , UUPSUpgradeable, ReentrancyGuard, FastLaneEvents {
-     165                 :            :     using Address for address payable;
-     166                 :            :     using EnumerableSet for EnumerableSet.AddressSet;
-     167                 :            :     using SafeTransferLib for ERC20;
-     168                 :            : 
-     169                 :            :     ERC20 public bid_token;
-     170                 :            : 
-     171                 :            :     constructor(address _newOwner) {
-     172                 :            :         _transferOwnership(_newOwner);
-     173                 :            :         _disableInitializers();
-     174                 :            :     }
-     175                 :            : 
-     176                 :            :     function initialize(address _newOwner) public initializer {
-     177                 :          1 :         __Ownable_init();
-     178                 :          1 :         __UUPSUpgradeable_init();
-     179                 :          1 :         _transferOwnership(_newOwner);
-     180                 :            :     }
-     181                 :            : 
-     182                 :            :     function _authorizeUpgrade(address) internal virtual override onlyOwner() {}
-     183                 :            : 
-     184                 :            : 
-     185                 :            :     /// @notice Initializes the auction
-     186                 :            :     /// @dev Also sets bid increment, resolver max gas, fee, autoship and batch size.
-     187                 :            :     /// @param _initial_bid_token ERC20 address to use for the auction
-     188                 :            :     /// @param _ops Operators address for crontabs
-     189                 :            :     /// @param _starter Address allowed to start/stop rounds
-     190                 :            :     function initialSetupAuction(address _initial_bid_token, address _ops, address _starter) external onlyOwner {
-     191         [ +  + ]:          2 :         if (auctionInitialized) revert TimeAlreadyInit();
-     192                 :          1 :         setBidToken(_initial_bid_token);
-     193                 :          1 :         setOps(_ops);
-     194                 :          1 :         auction_number = 1;
-     195                 :          1 :         setMinimumBidIncrement(10* (10**18));
-     196                 :          1 :         setMinimumAutoShipThreshold(2000* (10**18));
-     197                 :          1 :         setResolverMaxGasPrice(200 gwei);
-     198                 :          1 :         setFastlaneFee(50000);
-     199                 :          1 :         setAutopayBatchSize(10); 
-     200                 :          1 :         setStarter(_starter);
-     201                 :          1 :         auctionInitialized = true;
-     202                 :            :     }
-     203                 :            : 
-     204                 :            :     /// @notice Gelato Ops Address
-     205                 :            :     address public ops;
-     206                 :            : 
-     207                 :            :     // Variables mutable by owner via function calls
-     208                 :            : 
-     209                 :            :     /// @notice Minimum bid increment required on top of from the current top bid for a pair
-     210                 :            :     uint256 public bid_increment = 10 * (10**18);
-     211                 :            : 
-     212                 :            : 
-     213                 :            :     /// @notice Minimum amount for Validator Preferences to get the profits airdropped
-     214                 :            :     uint128 public minAutoShipThreshold = 2000 * (10**18); // Validators balances > 2k should get auto-transfered
-     215                 :            : 
-     216                 :            :     /// @notice Current auction round, 
-     217                 :            :     /// @dev Offset by 1 so payouts are at 0. In general payouts are for round n-1.
-     218                 :            :     uint128 public auction_number = 1;
-     219                 :            : 
-     220                 :            :     uint128 public constant MAX_AUCTION_VALUE = type(uint128).max; // 2**128 - 1
-     221                 :            : 
-     222                 :            :     /// @notice Max gas price for ops to attempt autopaying pending balances over threshold
-     223                 :            :     uint128 public max_gas_price = 200 gwei;
-     224                 :            : 
-     225                 :            :     /// @notice Fee (out of one million)
-     226                 :            :     uint24 public fast_lane_fee = 50000; 
-     227                 :            : 
-     228                 :            :     /// @notice Number of validators to pay per gelato action
-     229                 :            :     uint16 public autopay_batch_size = 10;
-     230                 :            : 
-     231                 :            :     /// @notice Auction live status
-     232                 :            :     bool public auction_live = false;
-     233                 :            : 
-     234                 :            :     bool internal paused = false;
-     235                 :            : 
-     236                 :            :     /// @notice Ops crontab disabled
-     237                 :            :     bool internal _offchain_checker_disabled = false;
-     238                 :            : 
-     239                 :            :     /// @notice Tracks status of seen addresses and when they become eligible for bidding
-     240                 :            :     mapping(address => Status) internal statusMap;
-     241                 :            : 
-     242                 :            :     /// @notice Tracks bids per auction_number per pair
-     243                 :            :     mapping(uint256 => mapping(address => mapping(address => Bid)))
-     244                 :            :         internal auctionsMap;
-     245                 :            : 
-     246                 :            :     /// @notice Validators participating in the auction for a round
-     247                 :            :     mapping(uint128 => EnumerableSet.AddressSet) internal validatorsactiveAtAuctionRound;
-     248                 :            : 
-     249                 :            :     /// @notice Validators cuts to be withdraw or dispatched regularly
-     250                 :            :     mapping(address => ValidatorBalanceCheckpoint) internal validatorsCheckpoints;
-     251                 :            : 
-     252                 :            :     /// @notice Validator preferences for payment and min autoship amount
-     253                 :            :     mapping(address => ValidatorPreferences) internal validatorsPreferences;
-     254                 :            : 
-     255                 :            :     /// @notice Auto cleared by EndAuction every round
-     256                 :            :     uint256 public outstandingFLBalance = 0;
-     257                 :            : 
-     258                 :            :     /// @notice Start & Stop auction role
-     259                 :            :     address public auctionStarter;
-     260                 :            : 
-     261                 :            :     /// @notice Auction was initialized
-     262                 :            :     bool public auctionInitialized = false;
-     263                 :            : 
-     264                 :            :     /// @notice Internally updates a validator preference
-     265                 :            :     /// @dev Only callable by an already setup validator, and only for themselves via {setValidatorPreferences}
-     266                 :            :     /// @param _target Validator to update
-     267                 :            :     /// @param _minAutoshipAmount Amount desired before autoship kicks in
-     268                 :            :     /// @param _validatorPayableAddress Address the auction proceeds will go to for this validator
-     269                 :            :     function _updateValidatorPreferences(address _target, uint128 _minAutoshipAmount, address _validatorPayableAddress) internal {
-     270         [ +  + ]:         11 :         if(_minAutoshipAmount < minAutoShipThreshold) revert InequalityTooLow();
-     271         [ +  + ]:         10 :         if((_validatorPayableAddress == address(0)) || (_validatorPayableAddress == address(this))) revert InequalityAddressMismatch();
-     272                 :            :         
-     273                 :          9 :         validatorsPreferences[_target] = ValidatorPreferences(_minAutoshipAmount, _validatorPayableAddress);
-     274                 :          9 :         emit ValidatorPreferencesSet(_target,_minAutoshipAmount, _validatorPayableAddress);
-     275                 :            :     }
-     276                 :            : 
-     277                 :            :     /***********************************|
-     278                 :            :     |         Validator-only            |
-     279                 :            :     |__________________________________*/
-     280                 :            : 
-     281                 :            :     /// @notice Internally updates a validator preference
-     282                 :            :     /// @dev Only callable by an already setup validator via {onlyValidator}
-     283                 :            :     /// @param _minAutoshipAmount Amount desired before autoship kicks in
-     284                 :            :     /// @param _validatorPayableAddress Address the auction proceeds will go to for this validator
-     285                 :            :     function setValidatorPreferences(uint128 _minAutoshipAmount, address _validatorPayableAddress) external onlyValidator {
-     286                 :          4 :         _updateValidatorPreferences(msg.sender, _minAutoshipAmount, _validatorPayableAddress);
-     287                 :            :     }
-     288                 :            : 
-     289                 :            :     /***********************************|
-     290                 :            :     |             Owner-only            |
-     291                 :            :     |__________________________________*/
-     292                 :            : 
-     293                 :            :     /// @notice Defines the paused state of the Auction
-     294                 :            :     /// @dev Only owner
-     295                 :            :     /// @param _state New state
-     296                 :            :     function setPausedState(bool _state) external onlyOwner {
-     297                 :          1 :         paused = _state;
-     298                 :          1 :         emit PausedStateSet(_state);
-     299                 :            :     }
-     300                 :            : 
-     301                 :            :     /// @notice Sets minimum bid increment 
-     302                 :            :     /// @dev Used to avoid people micro-bidding up by .000000001
-     303                 :            :     /// @param _bid_increment New increment
-     304                 :            :     function setMinimumBidIncrement(uint256 _bid_increment) public onlyOwner {
-     305                 :          3 :         bid_increment = _bid_increment;
-     306                 :          3 :         emit MinimumBidIncrementSet(_bid_increment);
-     307                 :            :     }
-     308                 :            : 
-     309                 :            :     /// @notice Sets address of Ops
-     310                 :            :     /// @dev Ops is allowed to call {processAutopayJobs}
-     311                 :            :     /// @param _ops New operator of crontabs
-     312                 :            :     function setOps(address _ops) public onlyOwner {
-     313                 :          3 :         ops = _ops;
-     314                 :          3 :         emit OpsSet(_ops);
-     315                 :            :     }
-     316                 :            : 
-     317                 :            :     /// @notice Sets minimum balance a checkpoint must meet to be considered for autoship
-     318                 :            :     /// @dev This amount will always override validator preferences if greater
-     319                 :            :     /// @param _minAmount Minimum amount
-     320                 :            :     function setMinimumAutoShipThreshold(uint128 _minAmount) public onlyOwner {
-     321                 :          5 :         minAutoShipThreshold = _minAmount;
-     322                 :          5 :         emit MinimumAutoshipThresholdSet(_minAmount);
-     323                 :            :     }
-     324                 :            : 
-     325                 :            :     /// @notice Sets maximum network gas for autoship
-     326                 :            :     /// @dev Past this value autoship will have to be manually called until gwei goes lower or this gets upped
-     327                 :            :     /// @param _maxgas Maximum gas
-     328                 :            :     function setResolverMaxGasPrice(uint128 _maxgas) public onlyOwner {
-     329                 :          3 :         max_gas_price = _maxgas;
-     330                 :          3 :         emit ResolverMaxGasPriceSet(_maxgas);
-     331                 :            :     }
-     332                 :            : 
-     333                 :            :     /// @notice Sets the protocol fee (out of 1000000 (ie v2 fee decimals))
-     334                 :            :     /// @dev Initially set to 50000 (5%) For now we can't change the fee during an ongoing auction since the bids do not store the fee value at bidding time
-     335                 :            :     /// @param _fastLaneFee Protocl fee on bids
-     336                 :            :     function setFastlaneFee(uint24 _fastLaneFee)
-     337                 :            :         public
-     338                 :            :         onlyOwner
-     339                 :            :         notLiveStage
-     340                 :            :     {
-     341         [ +  + ]:          7 :         if (_fastLaneFee > 1000000) revert InequalityTooHigh();
-     342                 :          6 :         fast_lane_fee = _fastLaneFee;
-     343                 :          6 :         emit FastLaneFeeSet(_fastLaneFee);
-     344                 :            :     }
-     345                 :            : 
-     346                 :            :     /// @notice Sets the ERC20 token that is treated as the base currency for bidding purposes
-     347                 :            :     /// @dev Initially set to WMATIC, changing it is not allowed during auctions, special considerations must be taken care of if changing this value, such as paying all outstanding validators first to not mix ERC's.
-     348                 :            :     /// @param _bid_token_address Address of the bid token
-     349                 :            :     function setBidToken(address _bid_token_address)
-     350                 :            :         public
-     351                 :            :         onlyOwner
-     352                 :            :         notLiveStage
-     353                 :            :     {
-     354                 :            :         // Prevent QBridge Finance issues
-     355         [ +  + ]:          2 :         if (_bid_token_address == address(0)) revert GeneralFailure();
-     356                 :          1 :         bid_token = ERC20(_bid_token_address);
-     357                 :          1 :         emit BidTokenSet(_bid_token_address);
-     358                 :            :     }
-     359                 :            : 
-     360                 :            : 
-     361                 :            :     /// @notice Sets the auction starter role
-     362                 :            :     /// @dev Both owner and starter will be able to trigger starts/stops
-     363                 :            :     /// @param _starter Address of the starter role
-     364                 :            :     function setStarter(address _starter) public onlyOwner {
-     365                 :          2 :         auctionStarter = _starter;
-     366                 :          2 :         emit AuctionStarterSet(auctionStarter);
-     367                 :            :     }
-     368                 :            : 
-     369                 :            : 
-     370                 :            :     /// @notice Adds an address to the allowed entity mapping as opportunity
-     371                 :            :     /// @dev Should be a router/aggregator etc. Opportunities are queued to the next auction
-     372                 :            :     /// @dev Do not use on already enabled opportunity or it will be stopped for current auction round
-     373                 :            :     /// @param _opportunityAddress Address of the opportunity
-     374                 :            :     function enableOpportunityAddress(address _opportunityAddress)
-     375                 :            :         external
-     376                 :            :         onlyOwner
-     377                 :            :     {
-     378                 :            :         // Enable for after auction ends if live
-     379                 :         17 :         uint128 target_auction_number = auction_live ? auction_number + 1 : auction_number;
-     380                 :         17 :         statusMap[_opportunityAddress] = Status(target_auction_number, MAX_AUCTION_VALUE, statusType.OPPORTUNITY);
-     381                 :         17 :         emit OpportunityAddressEnabled(_opportunityAddress, target_auction_number);
-     382                 :            :     }
-     383                 :            : 
-     384                 :            :     /// @notice Disables an opportunity
-     385                 :            :     /// @dev If auction is live, only takes effect at next round
-     386                 :            :     /// @param _opportunityAddress Address of the opportunity
-     387                 :            :     function disableOpportunityAddress(address _opportunityAddress)
-     388                 :            :         external
-     389                 :            :         onlyOwner
-     390                 :            :     {
-     391                 :          4 :         Status storage existingStatus = statusMap[_opportunityAddress];
-     392         [ +  + ]:          4 :         if (existingStatus.kind != statusType.OPPORTUNITY) revert PermissionInvalidOpportunityAddress();
-     393                 :          3 :         uint128 target_auction_number = auction_live ? auction_number + 1 : auction_number;
-     394                 :            : 
-     395                 :          3 :         existingStatus.inactiveAtAuctionRound = target_auction_number;
-     396                 :          3 :         emit OpportunityAddressDisabled(_opportunityAddress, target_auction_number);
-     397                 :            :     }
-     398                 :            : 
-     399                 :            :     /// @notice Internal, enables a validator checkpoint
-     400                 :            :     /// @dev If auction is live, only takes effect at next round
-     401                 :            :     /// @param _validatorAddress Address of the validator
-     402                 :            :     function _enableValidatorCheckpoint(address _validatorAddress) internal {
-     403                 :         21 :         uint128 target_auction_number = auction_live ? auction_number + 1 : auction_number;
-     404                 :         21 :         statusMap[_validatorAddress] = Status(target_auction_number, MAX_AUCTION_VALUE, statusType.VALIDATOR);
-     405                 :            :         
-     406                 :            :         // Create the checkpoint for the Validator
-     407                 :         21 :         ValidatorBalanceCheckpoint memory valCheckpoint = validatorsCheckpoints[_validatorAddress];
-     408         [ +  + ]:         21 :         if (valCheckpoint.lastBidReceivedAuction == 0) {
-     409                 :         20 :             validatorsCheckpoints[_validatorAddress] = ValidatorBalanceCheckpoint(0, 0, 0, 0);
-     410                 :            :         } 
-     411                 :         21 :         emit ValidatorAddressEnabled(_validatorAddress, target_auction_number);
-     412                 :            :     }
-     413                 :            : 
-     414                 :            :     /// @notice Enables a validator checkpoint
-     415                 :            :     /// @dev If auction is live, only takes effect at next round
-     416                 :            :     /// @param _validatorAddress Address of the validator
-     417                 :            :     function enableValidatorAddress(address _validatorAddress)
-     418                 :            :         external
-     419                 :            :         onlyOwner
-     420                 :            :     {
-     421                 :         14 :        _enableValidatorCheckpoint(_validatorAddress);
-     422                 :            :     }
-     423                 :            : 
-     424                 :            :     /// @notice Enables a validator checkpoint and sets preferences
-     425                 :            :     /// @dev If auction is live, only takes effect at next round
-     426                 :            :     /// @param _validatorAddress Address of the validator
-     427                 :            :     /// @param _minAutoshipAmount Amount desired before autoship kicks in
-     428                 :            :     /// @param _validatorPayableAddress Address the auction proceeds will go to for this validator
-     429                 :            :     function enableValidatorAddressWithPreferences(address _validatorAddress, uint128 _minAutoshipAmount, address _validatorPayableAddress) 
-     430                 :            :         external
-     431                 :            :         onlyOwner
-     432                 :            :     {
-     433                 :          7 :             _enableValidatorCheckpoint(_validatorAddress);
-     434                 :          7 :             _updateValidatorPreferences(_validatorAddress, _minAutoshipAmount, _validatorPayableAddress);
-     435                 :            :     }
-     436                 :            : 
-     437                 :            :     /// @notice Disables a validator
-     438                 :            :     /// @dev If auction is live, only takes effect at next round
-     439                 :            :     /// @param _validatorAddress Address of the validator
-     440                 :            :     function disableValidatorAddress(address _validatorAddress)
-     441                 :            :         external
-     442                 :            :         onlyOwner
-     443                 :            :     {
-     444                 :          2 :         Status storage existingStatus = statusMap[_validatorAddress];
-     445         [ +  + ]:          2 :         if (existingStatus.kind != statusType.VALIDATOR) revert PermissionMustBeValidator();
-     446                 :          1 :         uint128 target_auction_number = auction_live ? auction_number + 1 : auction_number;
-     447                 :            : 
-     448                 :          1 :         existingStatus.inactiveAtAuctionRound = target_auction_number;
-     449                 :          1 :         emit ValidatorAddressDisabled(_validatorAddress, target_auction_number);
-     450                 :            :     }
-     451                 :            : 
-     452                 :            :     /// @notice Start auction round / Enable bidding
-     453                 :            :     /// @dev Both starter and owner roles are allowed to start
-     454                 :            :     function startAuction() external onlyStarterOrOwner notLiveStage {
-     455                 :         28 :         auction_live = true;
-     456                 :         28 :         emit AuctionStarted(auction_number);
-     457                 :            :     }
-     458                 :            : 
-     459                 :            :     /// @notice Ends an auction round
-     460                 :            :     /// @dev Ending an auction round transfers the cuts to PFL and enables validators to collect theirs from the auction that ended
-     461                 :            :     /// @dev Also enables fastlane privileges of pairs winners until endAuction gets called again at next auction round
-     462                 :            :     function endAuction()
-     463                 :            :         external
-     464                 :            :         onlyStarterOrOwner
-     465                 :            :         atLiveStage
-     466                 :            :         nonReentrant
-     467                 :            :         returns (bool)
-     468                 :            :     {
-     469                 :            : 
-     470                 :         21 :         auction_live = false;
-     471                 :            : 
-     472                 :         21 :         emit AuctionEnded(auction_number);
-     473                 :            : 
-     474                 :            :         // Increment auction_number so the checkpoints are available.
-     475                 :         21 :         ++auction_number;
-     476                 :            : 
-     477                 :         21 :         uint256 ownerBalance = outstandingFLBalance;
-     478                 :         21 :         outstandingFLBalance = 0;
-     479                 :            : 
-     480                 :            :         // Last for C-E-I.
-     481                 :         21 :         bid_token.safeTransfer(owner(), ownerBalance);
-     482                 :            : 
-     483                 :         21 :         return true;
-     484                 :            :     }
-     485                 :            : 
-     486                 :            :     /// @notice Sets autopay batch size
-     487                 :            :     /// @dev Defines the maximum number of addresses the ops will try to pay outstanding balances per block
-     488                 :            :     /// @param _size Size of the batch
-     489                 :            :     function setAutopayBatchSize(uint16 _size) public onlyOwner {
-     490                 :          4 :         autopay_batch_size = _size;
-     491                 :          4 :         emit AutopayBatchSizeSet(autopay_batch_size);
-     492                 :            :     }
-     493                 :            : 
-     494                 :            :     /// @notice Defines if the offchain checked is disabled
-     495                 :            :     /// @dev If true autoship will be disabled
-     496                 :            :     /// @param _state Disabled state
-     497                 :            :     function setOffchainCheckerDisabledState(bool _state) external onlyOwner {
-     498                 :          2 :         _offchain_checker_disabled = _state;
-     499                 :            :     }
-     500                 :            : 
-     501                 :            :     /// @notice Withdraws stuck matic
-     502                 :            :     /// @dev In the event people send matic instead of WMATIC we can send it back 
-     503                 :            :     /// @param _amount Amount to send to owner
-     504                 :            :     function withdrawStuckNativeToken(uint256 _amount)
-     505                 :            :         external
-     506                 :            :         onlyOwner
-     507                 :            :         nonReentrant
-     508                 :            :     {
-     509         [ +  + ]:          1 :         if (address(this).balance >= _amount) {
-     510                 :          1 :             payable(owner()).sendValue(_amount);
-     511                 :          1 :             emit WithdrawStuckNativeToken(owner(), _amount);
-     512                 :            :         }
-     513                 :            :     }
-     514                 :            : 
-     515                 :            :     /// @notice Withdraws stuck ERC20
-     516                 :            :     /// @dev In the event people send ERC20 instead of bid_token ERC20 we can send them back 
-     517                 :            :     /// @param _tokenAddress Address of the stuck token
-     518                 :            :     function withdrawStuckERC20(address _tokenAddress)
-     519                 :            :         external
-     520                 :            :         onlyOwner
-     521                 :            :         nonReentrant
-     522                 :            :     {
-     523         [ +  + ]:          2 :         if (_tokenAddress == address(bid_token)) revert InequalityWrongToken();
-     524                 :          1 :         ERC20 oopsToken = ERC20(_tokenAddress);
-     525                 :          1 :         uint256 oopsTokenBalance = oopsToken.balanceOf(address(this));
-     526                 :            : 
-     527         [ +  + ]:          1 :         if (oopsTokenBalance > 0) {
-     528                 :          1 :             oopsToken.safeTransfer(owner(), oopsTokenBalance);
-     529                 :          1 :             emit WithdrawStuckERC20(address(this), owner(), oopsTokenBalance);
-     530                 :            :         }
-     531                 :            :     }
-     532                 :            : 
-     533                 :            :     /// @notice Internal, receives a bid
-     534                 :            :     /// @dev Requires approval of this contract beforehands
-     535                 :            :     /// @param _currentTopBidAmount Value of the current top bid
-     536                 :            :     /// @param _currentTopBidSearcherPayableAddress Address of the current top bidder for that bid pair
-     537                 :            :     function _receiveBid(
-     538                 :            :         Bid memory bid,
-     539                 :            :         uint256 _currentTopBidAmount,
-     540                 :            :         address _currentTopBidSearcherPayableAddress
-     541                 :            :     ) internal {
-     542                 :            :         // Verify the bid exceeds previous bid + minimum increment
-     543         [ +  + ]:         32 :         if (bid.bidAmount < _currentTopBidAmount + bid_increment) revert InequalityTooLow();
-     544                 :            : 
-     545                 :            :         // Verify the new bidder isnt the previous bidder as self-spam protection
-     546         [ +  + ]:         28 :         if (bid.searcherPayableAddress == _currentTopBidSearcherPayableAddress) revert InequalityAlreadyTopBidder();
-     547                 :            : 
-     548                 :            :         // Verify the bidder has the balance.
-     549         [ +  + ]:         27 :         if (bid_token.balanceOf(bid.searcherPayableAddress) < bid.bidAmount) revert InequalityNotEnoughFunds();
-     550                 :            : 
-     551                 :            :         // Transfer the bid amount (requires approval)
-     552                 :         26 :         bid_token.safeTransferFrom(
-     553                 :            :             bid.searcherPayableAddress,
-     554                 :            :             address(this),
-     555                 :            :             bid.bidAmount
-     556                 :            :         );
-     557                 :            :     }
-     558                 :            : 
-     559                 :            :     /// @notice Internal, refunds previous top bidder
-     560                 :            :     /// @dev Be very careful about changing bid token to any ERC777
-     561                 :            :     /// @param bid Bid to refund
-     562                 :            :     function _refundPreviousBidder(Bid memory bid) internal {
-     563                 :          5 :         bid_token.safeTransfer(
-     564                 :            :             bid.searcherPayableAddress,
-     565                 :            :             bid.bidAmount
-     566                 :            :         );
-     567                 :            :     }
-     568                 :            : 
-     569                 :            :     /// @notice Internal, calculates cuts
-     570                 :            :     /// @dev vCut 
-     571                 :            :     /// @param amount Amount to calculates cuts from
-     572                 :            :     /// @return vCut validator cut
-     573                 :            :     /// @return flCut protocol cut
-     574                 :            :     function _calculateCuts(uint256 amount) internal view returns (uint256 vCut, uint256 flCut) {
-     575                 :         41 :         vCut = (amount * (1000000 - fast_lane_fee)) / 1000000;
-     576                 :         41 :         flCut = amount - vCut;
-     577                 :            :     }
-     578                 :            : 
-     579                 :            :     /// @notice Internal, calculates if a validator balance checkpoint is redeemable as of current auction_number against a certain amount
-     580                 :            :     /// @dev Not pure, depends of global auction_number, could be only outstandingBalance or outstandingBalance + pendingBalanceAtlastBid if last bid was at an oldest round than auction_number
-     581                 :            :     /// @param valCheckpoint Validator checkpoint to validate against `minAmount`
-     582                 :            :     /// @param minAmount Amount to calculates cuts from
-     583                 :            :     /// @return bool Is there balance to redeem for validator and amount at current auction_number
-     584                 :            :     function _checkRedeemableOutstanding(ValidatorBalanceCheckpoint memory valCheckpoint,uint256 minAmount) internal view returns (bool) {
-     585                 :         47 :         return valCheckpoint.outstandingBalance >= minAmount || ((valCheckpoint.lastBidReceivedAuction < auction_number) && ((valCheckpoint.pendingBalanceAtlastBid + valCheckpoint.outstandingBalance) >= minAmount));    
-     586                 :            :     }
-     587                 :            : 
-     588                 :            :     /// @notice Internal, attemps to redeem a validator outstanding balance to its validatorPayableAddress
-     589                 :            :     /// @dev Must be owed at least 1 of `bid_token`
-     590                 :            :     /// @param _outstandingValidatorWithBalance Validator address
-     591                 :            :     function _redeemOutstanding(address _outstandingValidatorWithBalance) internal {
-     592         [ +  + ]:         16 :         if (statusMap[_outstandingValidatorWithBalance].kind != statusType.VALIDATOR) revert PermissionMustBeValidator();
-     593                 :         15 :         ValidatorBalanceCheckpoint storage valCheckpoint = validatorsCheckpoints[_outstandingValidatorWithBalance];
-     594                 :            :        
-     595                 :            :         // Either we have outstandingBalance or we have pendingBalanceAtlastBid from previous auctions.
-     596         [ +  + ]:         15 :         if (!_checkRedeemableOutstanding(valCheckpoint, 1)) revert InequalityNothingToRedeem();
-     597                 :            : 
-     598                 :         12 :         uint256 redeemable = 0;
-     599         [ +  + ]:         12 :         if (valCheckpoint.lastBidReceivedAuction < auction_number) {
-     600                 :            :             // We can redeem both
-     601                 :         10 :             redeemable = valCheckpoint.pendingBalanceAtlastBid + valCheckpoint.outstandingBalance;
-     602                 :         10 :             valCheckpoint.pendingBalanceAtlastBid = 0;
-     603                 :            :         } else {
-     604                 :            :             // Another bid was received in the current auction, profits were already moved
-     605                 :            :             // to outstandingBalance by the bidder
-     606                 :          2 :             redeemable = valCheckpoint.outstandingBalance;
-     607                 :            :         }
-     608                 :            : 
-     609                 :            :         // Clear outstanding in any case.
-     610                 :         12 :         valCheckpoint.outstandingBalance = 0;
-     611                 :         12 :         valCheckpoint.lastWithdrawnAuction = auction_number;
-     612                 :            : 
-     613                 :         12 :         address dst = _outstandingValidatorWithBalance;
-     614                 :         12 :         ValidatorPreferences memory valPrefs = validatorsPreferences[dst];
-     615         [ +  + ]:         12 :         if (valPrefs.validatorPayableAddress != address(0)) {
-     616                 :          5 :             dst = valPrefs.validatorPayableAddress;
-     617                 :            :         }
-     618                 :            : 
-     619                 :         12 :         bid_token.safeTransfer(
-     620                 :            :             dst,
-     621                 :            :             redeemable
-     622                 :            :         );
-     623                 :            : 
-     624                 :         12 :         emit ValidatorWithdrawnBalance(
-     625                 :            :             _outstandingValidatorWithBalance,
-     626                 :            :             auction_number,
-     627                 :            :             redeemable,
-     628                 :            :             dst,
-     629                 :            :             msg.sender
-     630                 :            :         );
-     631                 :            :     }
-     632                 :            : 
-     633                 :            :     /***********************************|
-     634                 :            :     |             Public                |
-     635                 :            :     |__________________________________*/
-     636                 :            : 
-     637                 :            : 
-     638                 :            :     /// @notice Bidding function for searchers to submit their bids
-     639                 :            :     /// @dev Each bid pulls funds on submission and searchers are refunded when they are outbid
-     640                 :            :     /// @param bid Bid struct as tuple (validatorAddress, opportunityAddress, searcherContractAddress ,searcherPayableAddress, bidAmount)
-     641                 :            :     function submitBid(Bid calldata bid)
-     642                 :            :         external
-     643                 :            :         atLiveStage
-     644                 :            :         whenNotPaused
-     645                 :            :         nonReentrant
-     646                 :            :     {
-     647                 :            :         // Verify that the bid is coming from the EOA that's paying
-     648         [ +  + ]:         40 :         if (msg.sender != bid.searcherPayableAddress) revert PermissionOnlyFromPayorEoa();
-     649                 :            : 
-     650                 :         39 :         Status memory validatorStatus = statusMap[bid.validatorAddress];
-     651                 :         39 :         Status memory opportunityStatus = statusMap[bid.opportunityAddress];
-     652                 :            : 
-     653                 :            :         // Verify that the opportunity and the validator are both participating addresses
-     654         [ +  + ]:         39 :         if (validatorStatus.kind != statusType.VALIDATOR) revert PermissionMustBeValidator();
-     655         [ +  + ]:         38 :         if (opportunityStatus.kind != statusType.OPPORTUNITY) revert PermissionInvalidOpportunityAddress();
-     656                 :            : 
-     657                 :            :         // We want auction_number be in the [activeAtAuctionRound - inactiveAtAuctionRound] window.
-     658                 :            :         // Verify not flagged as inactive
-     659         [ +  + ]:         37 :         if (validatorStatus.inactiveAtAuctionRound <= auction_number) revert InequalityValidatorDisabledAtTime();
-     660         [ +  + ]:         35 :         if (opportunityStatus.inactiveAtAuctionRound <= auction_number) revert InequalityOpportunityDisabledAtTime();
-     661                 :            : 
-     662                 :            :         // Verify still flagged active
-     663         [ +  + ]:         34 :         if (validatorStatus.activeAtAuctionRound > auction_number) revert InequalityValidatorNotEnabledYet();
-     664         [ +  + ]:         33 :         if (opportunityStatus.activeAtAuctionRound > auction_number) revert InequalityOpportunityNotEnabledYet();
-     665                 :            : 
-     666                 :            : 
-     667                 :            :         // Figure out if we have an existing bid 
-     668                 :         32 :         Bid memory current_top_bid = auctionsMap[auction_number][
-     669                 :            :                 bid.validatorAddress
-     670                 :            :             ][bid.opportunityAddress];
-     671                 :            : 
-     672                 :         32 :         ValidatorBalanceCheckpoint storage valCheckpoint = validatorsCheckpoints[bid.validatorAddress];
-     673                 :            : 
-     674         [ +  + ]:         32 :         if ((valCheckpoint.lastBidReceivedAuction != auction_number) && (valCheckpoint.pendingBalanceAtlastBid > 0)) {
-     675                 :            :             // Need to move pending to outstanding
-     676                 :          4 :             valCheckpoint.outstandingBalance += valCheckpoint.pendingBalanceAtlastBid;
-     677                 :          4 :             valCheckpoint.pendingBalanceAtlastBid = 0;
-     678                 :            :         }
-     679                 :            :  
-     680                 :            :         // Update bid for pair
-     681                 :         32 :         auctionsMap[auction_number][bid.validatorAddress][
-     682                 :            :                 bid.opportunityAddress
-     683                 :            :             ] = bid;
-     684                 :            : 
-     685         [ +  + ]:         32 :         if (current_top_bid.bidAmount > 0) {
-     686                 :            :             // Existing bid for this auction number && pair combo
-     687                 :            :             // Handle checkpoint cuts replacement
-     688                 :          9 :             (uint256 vCutPrevious, uint256 flCutPrevious) = _calculateCuts(current_top_bid.bidAmount);
-     689                 :          9 :             (uint256 vCut, uint256 flCut) = _calculateCuts(bid.bidAmount);
-     690                 :            : 
-     691                 :          9 :             outstandingFLBalance = outstandingFLBalance + flCut - flCutPrevious;
-     692                 :          9 :             valCheckpoint.pendingBalanceAtlastBid =  valCheckpoint.pendingBalanceAtlastBid + vCut - vCutPrevious;
-     693                 :            : 
-     694                 :            : 
-     695                 :            :             // Update the existing Bid mapping
-     696                 :          9 :             _receiveBid(
-     697                 :            :                 bid,
-     698                 :            :                 current_top_bid.bidAmount,
-     699                 :            :                 current_top_bid.searcherPayableAddress
-     700                 :            :             );
-     701                 :          5 :             _refundPreviousBidder(current_top_bid);
-     702                 :            : 
-     703                 :            :            
-     704                 :            :         } else {
-     705                 :            :             // First bid on pair for this auction number
-     706                 :            :             // Update checkpoint if needed as another pair could have bid already for this auction number
-     707                 :            :             
-     708         [ +  + ]:         23 :             if (valCheckpoint.lastBidReceivedAuction != auction_number) {
-     709                 :         23 :                 valCheckpoint.lastBidReceivedAuction = auction_number;
-     710                 :            :             }
-     711                 :            : 
-     712                 :         23 :             (uint256 vCutFirst, uint256 flCutFirst) = _calculateCuts(bid.bidAmount);
-     713                 :            : 
-     714                 :            :             // Handle cuts
-     715                 :         23 :             outstandingFLBalance += flCutFirst;
-     716                 :         23 :             valCheckpoint.pendingBalanceAtlastBid += vCutFirst;
-     717                 :            : 
-     718                 :            :              // Check balance
-     719                 :         23 :             _receiveBid(bid, 0, address(0));
-     720                 :            :             
-     721                 :            : 
-     722                 :            :         }
-     723                 :            : 
-     724                 :            :         // Try adding to the validatorsactiveAtAuctionRound so the keeper can loop on it
-     725                 :            :         // EnumerableSet already checks key pre-existence
-     726                 :         25 :         validatorsactiveAtAuctionRound[auction_number].add(bid.validatorAddress);
-     727                 :            : 
-     728                 :         25 :         emit BidAdded(
-     729                 :            :             bid.searcherContractAddress,
-     730                 :            :             bid.validatorAddress,
-     731                 :            :             bid.opportunityAddress,
-     732                 :            :             bid.bidAmount,
-     733                 :            :             auction_number
-     734                 :            :         );
-     735                 :            :     }
-     736                 :            : 
-     737                 :            :     /// @notice Validators can always withdraw right after an amount is due
-     738                 :            :     /// @dev It can be during an ongoing auction with pendingBalanceAtlastBid being the current auction
-     739                 :            :     /// @dev Or lastBidReceivedAuction being a previous auction, in which case outstanding+pending can be withdrawn
-     740                 :            :     /// @dev _Anyone_ can initiate a validator to be paid what it's owed
-     741                 :            :     /// @param _outstandingValidatorWithBalance Redeems outstanding balance for a validator
-     742                 :            :     function redeemOutstandingBalance(address _outstandingValidatorWithBalance)
-     743                 :            :         external
-     744                 :            :         whenNotPaused
-     745                 :            :         nonReentrant
-     746                 :            :     {
-     747                 :         11 :         _redeemOutstanding(_outstandingValidatorWithBalance);
-     748                 :            :     }
-     749                 :            : 
-     750                 :            :     /***********************************|
-     751                 :            :     |       Public Resolvers            |
-     752                 :            :     |__________________________________*/
-     753                 :            : 
-     754                 :            :     /// @notice Gelato Offchain Resolver
-     755                 :            :     /// @dev Automated function checked each block offchain by Gelato Network if there is outstanding payments to process
-     756                 :            :     /// @return canExec Should the worker trigger
-     757                 :            :     /// @return execPayload The payload if canExec is true
-     758                 :            :     function checker()
-     759                 :            :         external
-     760                 :            :         view
-     761                 :            :         returns (bool canExec, bytes memory execPayload)
-     762                 :            :     {
-     763         [ +  + ]:         17 :         if (_offchain_checker_disabled || paused  || tx.gasprice > max_gas_price) return (false, "");
-     764                 :            :             // Go workers go
-     765                 :         15 :             canExec = false;
-     766                 :         15 :             (
-     767                 :            :                 bool hasJobs,
-     768                 :            :                 address[] memory autopayRecipients
-     769                 :         15 :             ) = getAutopayJobs(autopay_batch_size, auction_number - 1);
-     770         [ +  + ]:         15 :             if (hasJobs) {
-     771                 :          5 :                 canExec = true;
-     772                 :          5 :                 execPayload = abi.encodeWithSelector(
-     773                 :            :                     this.processAutopayJobs.selector,
-     774                 :            :                     autopayRecipients
-     775                 :            :                 );
-     776                 :          5 :                 return (canExec, execPayload);
-     777                 :            :             }
-     778                 :         10 :         return (false, "");
-     779                 :            :     }
-     780                 :            : 
-     781                 :            :     /// @notice Processes a list of addresses to transfer their outstanding balance
-     782                 :            :     /// @dev Genrally called by Ops with array length of autopay_batch_size
-     783                 :            :     /// @param autopayRecipients Array of recipents to consider for autopay
-     784                 :            :     function processAutopayJobs(address[] calldata autopayRecipients) external nonReentrant onlyOwnerStarterOps {
-     785                 :            :         // Reassert checks if insane spike between gelato trigger and tx picked up
-     786         [ #  + ]:          5 :         if (_offchain_checker_disabled || paused) revert PermissionPaused();
-     787         [ +  + ]:          5 :         if (tx.gasprice > max_gas_price) revert TimeGasNotSuitable();
-     788                 :            : 
-     789                 :          4 :         uint length = autopayRecipients.length;
-     790                 :          4 :         for (uint i = 0;i < length;) {
-     791         [ #  + ]:          8 :             if (autopayRecipients[i] != address(0)) {
-     792                 :          5 :                 _redeemOutstanding(autopayRecipients[i]);
-     793                 :            :             }
-     794                 :          8 :             unchecked { ++i; }
-     795                 :            :         }
-     796                 :            :     }
-     797                 :            : 
-     798                 :            :     /***********************************|
-     799                 :            :     |             Views                 |
-     800                 :            :     |__________________________________*/
-     801                 :            : 
-     802                 :            :     /// @notice Returns if there is autopays to be done for given `_auction_index`
-     803                 :            :     /// @dev  Most likely called off chain by Gelato
-     804                 :            :     /// @param _batch_size Max recipients to return
-     805                 :            :     /// @param _auction_index Auction round
-     806                 :            :     /// @return hasJobs If there was jobs found to be done by ops
-     807                 :            :     /// @return autopayRecipients List of addresses eligible to be paid
-     808                 :            :     function getAutopayJobs(uint16 _batch_size, uint128 _auction_index) public view returns (bool hasJobs, address[] memory autopayRecipients) {
-     809                 :         22 :         autopayRecipients = new address[](_batch_size); // Filled with 0x0
-     810                 :            :         // An active validator means a bid happened so potentially balances were moved to outstanding while the bid happened
-     811                 :         22 :         EnumerableSet.AddressSet storage prevRoundAddrSet = validatorsactiveAtAuctionRound[_auction_index];
-     812                 :         22 :         uint16 assigned = 0;
-     813                 :         22 :         uint256 len = prevRoundAddrSet.length();
-     814                 :         22 :         for (uint256 i = 0; i < len; i++) {
-     815                 :         32 :             address current_validator = prevRoundAddrSet.at(i);
-     816                 :         32 :             ValidatorBalanceCheckpoint memory valCheckpoint = validatorsCheckpoints[current_validator];
-     817                 :         32 :             uint256 minAmountForValidator = minAutoShipThreshold >= validatorsPreferences[current_validator].minAutoshipAmount ? minAutoShipThreshold : validatorsPreferences[current_validator].minAutoshipAmount;
-     818         [ #  + ]:         32 :             if (_checkRedeemableOutstanding(valCheckpoint, minAmountForValidator)) {
-     819                 :         11 :                 autopayRecipients[assigned] = current_validator;
-     820                 :         11 :                 ++assigned;
-     821                 :            :             }
-     822         [ +  + ]:         32 :             if (assigned >= _batch_size) {
-     823                 :          2 :                 break;
-     824                 :            :             }
-     825                 :            :         }
-     826                 :         22 :         hasJobs = assigned > 0;
-     827                 :            :     }
-     828                 :            : 
-     829                 :            :     /// @notice Gets the status of an address
-     830                 :            :     /// @dev Contains (activeAtAuctionRound, inactiveAtAuctionRound, statusType)
-     831                 :            :     /// @param _who Address we want the status of
-     832                 :            :     /// @return Status Status of the given address
-     833                 :            :     function getStatus(address _who) external view returns (Status memory) {
-     834                 :          2 :         return statusMap[_who];
-     835                 :            :     }
-     836                 :            : 
-     837                 :            :     /// @notice Gets the validators involved with a given auction
-     838                 :            :     /// @dev validatorsactiveAtAuctionRound being an EnumerableSet
-     839                 :            :     /// @param _auction_index Auction Round
-     840                 :            :     /// @return Array of validator addresses that received a bid during round `_auction_index`
-     841                 :            :     function getValidatorsactiveAtAuctionRound(uint128 _auction_index) external view returns (address[] memory) {
-     842                 :          3 :         return validatorsactiveAtAuctionRound[_auction_index].values();
-     843                 :            :     }
-     844                 :            : 
-     845                 :            : 
-     846                 :            :     /// @notice Gets the auction number for which the fast lane privileges are active
-     847                 :            :     /// @return auction round
-     848                 :            :     function getActivePrivilegesAuctionNumber() public view returns (uint128) {
-     849                 :          3 :         return auction_number - 1;
-     850                 :            :     }
-     851                 :            : 
-     852                 :            :     /// @notice Gets the checkpoint of an address
-     853                 :            :     /// @param _who Address we want the checkpoint of
-     854                 :            :     /// @return Validator checkpoint
-     855                 :            :     function getCheckpoint(address _who) external view returns (ValidatorBalanceCheckpoint memory) {
-     856                 :         13 :         return validatorsCheckpoints[_who];
-     857                 :            :     }
-     858                 :            :  
-     859                 :            :     /// @notice Gets the preferences of an address
-     860                 :            :     /// @param _who Address we want the preferences of
-     861                 :            :     /// @return Validator preferences
-     862                 :            :     function getPreferences(address _who) external view returns (ValidatorPreferences memory) {
-     863                 :          1 :         return validatorsPreferences[_who];
-     864                 :            :     }
-     865                 :            : 
-     866                 :            :     /// @notice Determines the current top bid of a pair for the current ongoing (live) auction
-     867                 :            :     /// @param _validatorAddress Validator for the given pair
-     868                 :            :     /// @param _opportunityAddress Opportunity for the given pair
-     869                 :            :     /// @return Tuple (bidAmount, auction_round)
-     870                 :            :     function findLiveAuctionTopBid(address _validatorAddress, address _opportunityAddress)
-     871                 :            :         external
-     872                 :            :         view
-     873                 :            :         atLiveStage
-     874                 :            :         returns (uint256, uint128)
-     875                 :            :     {
-     876                 :          2 :             Bid memory topBid = auctionsMap[auction_number][
-     877                 :            :                 _validatorAddress
-     878                 :            :             ][_opportunityAddress];
-     879                 :          2 :             return (topBid.bidAmount, auction_number);
-     880                 :            :     }
-     881                 :            : 
-     882                 :            :     /// @notice Returns the top bid of a past auction round for a given pair
-     883                 :            :     /// @param _auction_index Auction round
-     884                 :            :     /// @param _validatorAddress Validator for the given pair
-     885                 :            :     /// @param _opportunityAddress Opportunity for the given pair
-     886                 :            :     /// @return Tuple (true|false, winningSearcher, auction_index)
-     887                 :            :     function findFinalizedAuctionWinnerAtAuction(
-     888                 :            :         uint128 _auction_index,
-     889                 :            :         address _validatorAddress,
-     890                 :            :         address _opportunityAddress
-     891                 :            :     ) public view
-     892                 :            :                 returns (
-     893                 :            :             bool,
-     894                 :            :             address,
-     895                 :            :             uint128
-     896                 :            :         )
-     897                 :            :     {
-     898         [ #  + ]:          3 :         if (_auction_index >= auction_number) revert InequalityInvalidIndex();
-     899                 :            :         // Get the winning searcher
-     900                 :          3 :         address winningSearcher = auctionsMap[_auction_index][
-     901                 :            :             _validatorAddress
-     902                 :            :         ][_opportunityAddress].searcherContractAddress;
-     903                 :            : 
-     904                 :            :         // Check if there is a winning searcher (no bids mean the winner is address(0))
-     905         [ +  + ]:          3 :         if (winningSearcher != address(0)) {
-     906                 :          2 :             return (true, winningSearcher, _auction_index);
-     907                 :            :         } else {
-     908                 :          1 :             return (false, winningSearcher, _auction_index);
-     909                 :            :         }
-     910                 :            :     }
-     911                 :            : 
-     912                 :            :     /// @notice Returns the the winner of the last completed auction for a given pair
-     913                 :            :     /// @param _validatorAddress Validator for the given pair
-     914                 :            :     /// @param _opportunityAddress Opportunity for the given pair
-     915                 :            :     /// @return Tuple (true|false, winningSearcher, auction_index)
-     916                 :            :     function findLastFinalizedAuctionWinner(
-     917                 :            :         address _validatorAddress,
-     918                 :            :         address _opportunityAddress
-     919                 :            :     )
-     920                 :            :         external
-     921                 :            :         view
-     922                 :            :         returns (
-     923                 :            :             bool,
-     924                 :            :             address,
-     925                 :            :             uint128
-     926                 :            :         )
-     927                 :            :     {
-     928                 :          1 :         return findFinalizedAuctionWinnerAtAuction(getActivePrivilegesAuctionNumber(), _validatorAddress, _opportunityAddress);
-     929                 :            :     }
-     930                 :            : 
-     931                 :            :   /***********************************|
-     932                 :            :   |             Modifiers             |
-     933                 :            :   |__________________________________*/
-     934                 :            : 
-     935                 :            :     modifier notLiveStage() {
-     936                 :            :         if (auction_live) revert TimeNotWhenAuctionIsLive();
-     937                 :            :         _;
-     938                 :            :     }
-     939                 :            : 
-     940                 :            :     modifier atLiveStage() {
-     941                 :            :         if (!auction_live) revert TimeNotWhenAuctionIsStopped();
-     942                 :            :         _;
-     943                 :            :     }
-     944                 :            : 
-     945                 :            :     modifier whenNotPaused() {
-     946                 :            :         if (paused) revert PermissionPaused();
-     947                 :            :         _;
-     948                 :            :     }
-     949                 :            : 
-     950                 :            :     modifier onlyValidator() {
-     951                 :            :         if(statusMap[msg.sender].kind != statusType.VALIDATOR) revert PermissionMustBeValidator();
-     952                 :            :         _;
-     953                 :            :     }
-     954                 :            : 
-     955                 :            :     modifier onlyOwnerStarterOps() {
-     956                 :            :         if (msg.sender != ops && msg.sender != auctionStarter && msg.sender != owner()) revert PermissionOnlyOps();
-     957                 :            :         _;
-     958                 :            :     }
-     959                 :            : 
-     960                 :            :     modifier onlyStarterOrOwner() {
-     961                 :            :         if (msg.sender != auctionStarter && msg.sender != owner()) revert PermissionNotOwnerNorStarter();
-     962                 :            :         _;
-     963                 :            :     }
-     964                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/legacy/index-sort-b.html b/report/contracts/legacy/index-sort-b.html deleted file mode 100644 index 6ea79aa..0000000 --- a/report/contracts/legacy/index-sort-b.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/legacy - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/legacyHitTotalCoverage
Test:lcov.infoLines:178178100.0 %
Date:2023-09-07 01:01:29Functions:4343100.0 %
Branches:707494.6 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneLegacyAuction.sol -
100.0%
-
100.0 %178 / 178100.0 %43 / 4394.6 %70 / 74
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/legacy/index-sort-f.html b/report/contracts/legacy/index-sort-f.html deleted file mode 100644 index 36163a4..0000000 --- a/report/contracts/legacy/index-sort-f.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/legacy - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/legacyHitTotalCoverage
Test:lcov.infoLines:178178100.0 %
Date:2023-09-07 01:01:29Functions:4343100.0 %
Branches:707494.6 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneLegacyAuction.sol -
100.0%
-
100.0 %178 / 178100.0 %43 / 4394.6 %70 / 74
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/legacy/index-sort-l.html b/report/contracts/legacy/index-sort-l.html deleted file mode 100644 index 88289ac..0000000 --- a/report/contracts/legacy/index-sort-l.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/legacy - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/legacyHitTotalCoverage
Test:lcov.infoLines:178178100.0 %
Date:2023-09-07 01:01:29Functions:4343100.0 %
Branches:707494.6 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneLegacyAuction.sol -
100.0%
-
100.0 %178 / 178100.0 %43 / 4394.6 %70 / 74
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/legacy/index.html b/report/contracts/legacy/index.html deleted file mode 100644 index 1861dbd..0000000 --- a/report/contracts/legacy/index.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/legacy - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/legacyHitTotalCoverage
Test:lcov.infoLines:178178100.0 %
Date:2023-09-07 01:01:29Functions:4343100.0 %
Branches:707494.6 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneLegacyAuction.sol -
100.0%
-
100.0 %178 / 178100.0 %43 / 4394.6 %70 / 74
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/searcher-direct/FastLaneSearcherDirect.sol.func-sort-c.html b/report/contracts/searcher-direct/FastLaneSearcherDirect.sol.func-sort-c.html deleted file mode 100644 index b1a1bba..0000000 --- a/report/contracts/searcher-direct/FastLaneSearcherDirect.sol.func-sort-c.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/searcher-direct/FastLaneSearcherDirect.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/searcher-direct - FastLaneSearcherDirect.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:232785.2 %
Date:2023-09-07 01:01:29Functions:71070.0 %
Branches:92437.5 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
FastLaneSearcherDirectContract.0
FastLaneSearcherDirectContract.isTrustedForwarder0
FastLaneSearcherDirectContract.revokeFastLaneEOA0
FastLaneSearcherDirectContract.approveFastLaneEOA2
FastLaneSearcherDirectContract.safeTransferETH2
SearcherContractExample.doFail2
FastLaneSearcherDirectContract.setPFLAuctionAddress4
SearcherContractExample.doStuff6
FastLaneSearcherDirectContract.checkFastLaneEOA8
FastLaneSearcherDirectContract.fastLaneCall10
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/searcher-direct/FastLaneSearcherDirect.sol.func.html b/report/contracts/searcher-direct/FastLaneSearcherDirect.sol.func.html deleted file mode 100644 index c197f7f..0000000 --- a/report/contracts/searcher-direct/FastLaneSearcherDirect.sol.func.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/searcher-direct/FastLaneSearcherDirect.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/searcher-direct - FastLaneSearcherDirect.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:232785.2 %
Date:2023-09-07 01:01:29Functions:71070.0 %
Branches:92437.5 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
FastLaneSearcherDirectContract.0
FastLaneSearcherDirectContract.approveFastLaneEOA2
FastLaneSearcherDirectContract.checkFastLaneEOA8
FastLaneSearcherDirectContract.fastLaneCall10
FastLaneSearcherDirectContract.isTrustedForwarder0
FastLaneSearcherDirectContract.revokeFastLaneEOA0
FastLaneSearcherDirectContract.safeTransferETH2
FastLaneSearcherDirectContract.setPFLAuctionAddress4
SearcherContractExample.doFail2
SearcherContractExample.doStuff6
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/searcher-direct/FastLaneSearcherDirect.sol.gcov.html b/report/contracts/searcher-direct/FastLaneSearcherDirect.sol.gcov.html deleted file mode 100644 index 756876b..0000000 --- a/report/contracts/searcher-direct/FastLaneSearcherDirect.sol.gcov.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/searcher-direct/FastLaneSearcherDirect.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/searcher-direct - FastLaneSearcherDirect.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:232785.2 %
Date:2023-09-07 01:01:29Functions:71070.0 %
Branches:92437.5 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : //SPDX-License-Identifier: Unlicensed
-       2                 :            : pragma solidity ^0.8.16;
-       3                 :            : 
-       4                 :            : import { ReentrancyGuard } from "solmate/utils/ReentrancyGuard.sol";
-       5                 :            : import "openzeppelin-contracts/contracts/utils/Strings.sol";
-       6                 :            : 
-       7                 :            : abstract contract FastLaneSearcherDirectContract is ReentrancyGuard {
-       8                 :            : 
-       9                 :            :     address public owner;
-      10                 :            :     address payable private PFLAuction;
-      11                 :            : 
-      12                 :            :     error WrongPermissions();
-      13                 :            :     error OriginEOANotOwner();
-      14                 :            :     error SearcherCallUnsuccessful(bytes retData);
-      15                 :            :     error SearcherInsufficientFunds(uint256 amountToSend, uint256 currentBalance);
-      16                 :            : 
-      17                 :            :     mapping(address => bool) internal approvedEOAs;
-      18                 :            : 
-      19                 :            :     constructor() {
-      20                 :            :         owner = msg.sender;
-      21                 :            :     }
-      22                 :            : 
-      23                 :            :     // The FastLane Auction contract will call this function
-      24                 :            :     // The `onlyRelayer` modifier makes sure the calls can only come from PFL or will revert
-      25                 :            :     // PFL will pass along the original msg.sender as _sender for the searcher to do additional checks
-      26                 :            :     // Do NOT forget `onlyRelayer` and `checkFastLaneEOA(_sender);` or ANYONE will be able to call your contract with arbitrary calldata
-      27                 :            :     function fastLaneCall(
-      28                 :            :             address _sender, // Relay will always set this to msg.sender that called it. Ideally you (owner) or an approvedEOA.
-      29                 :            :             uint256 _bidAmount,
-      30                 :            :             bytes calldata _searcherCallData // contains func selector and calldata for your MEV transaction ie: abi.encodeWithSignature("doStuff(address,uint256)", 0xF00, 1212);
-      31                 :            :     ) external payable onlyRelayer nonReentrant returns (bool, bytes memory) {
-      32                 :            :         
-      33                 :            :         // Make sure it's your own EOA that's calling your contract 
-      34                 :          8 :         checkFastLaneEOA(_sender);
-      35                 :            : 
-      36                 :            :         // Execute the searcher's intended function
-      37                 :          8 :         (bool success, bytes memory returnedData) = address(this).call(_searcherCallData);
-      38                 :            :         
-      39                 :            :         // If the call didn't turn out the way you wanted, revert either here or inside your MEV function itself
-      40         [ +  + ]:          8 :         if (!success) {
-      41                 :          2 :             return (false, returnedData);
-      42                 :            :         }
-      43                 :            : 
-      44                 :            :         // Balance check then Repay PFL at the end
-      45         [ +  + ]:          6 :         require(
-      46                 :            :             (address(this).balance >= _bidAmount), 
-      47                 :            :             string(abi.encodePacked("SearcherInsufficientFunds  ", Strings.toString(_bidAmount), " ", Strings.toString(address(this).balance)))
-      48                 :            :         );
-      49                 :            : 
-      50                 :          2 :         safeTransferETH(PFLAuction, _bidAmount);
-      51                 :            :         
-      52                 :            :         // /!\ Important to return success true or relay will revert.
-      53                 :            :         // In case of success == false, `returnedData` will be used as revert message that can be decoded with `.humanizeError()`
-      54                 :          2 :         return (success, returnedData);
-      55                 :            :     }
-      56                 :            : 
-      57                 :            :     // Other functions / modifiers that are necessary for FastLane integration:
-      58                 :            :     // NOTE: you can use your own versions of these, or find alternative ways
-      59                 :            :     // to implement similar safety checks. Please be careful when altering!
-      60                 :            :     function safeTransferETH(address to, uint256 amount) internal {
-      61                 :          2 :         bool success;
-      62                 :            : 
-      63                 :            :         assembly {
-      64                 :            :             // Transfer the ETH and store if it succeeded or not.
-      65                 :          2 :             success := call(gas(), to, amount, 0, 0, 0, 0)
-      66                 :            :         }
-      67                 :            : 
-      68         [ #  + ]:          2 :         require(success, "ETH_TRANSFER_FAILED");
-      69                 :            :     }
-      70                 :            : 
-      71                 :            :     function setPFLAuctionAddress(address _pflAuction) public {
-      72         [ #  + ]:          4 :         require(msg.sender == owner, "OriginEOANotOwner");
-      73                 :          4 :         PFLAuction = payable(_pflAuction);
-      74                 :            :     }
-      75                 :            : 
-      76                 :            :     function approveFastLaneEOA(address _eoaAddress) public {
-      77         [ #  + ]:          2 :         require(msg.sender == owner, "OriginEOANotOwner");
-      78                 :          2 :         approvedEOAs[_eoaAddress] = true;
-      79                 :            :     }
-      80                 :            : 
-      81                 :            :     function revokeFastLaneEOA(address _eoaAddress) public {
-      82         [ #  # ]:          0 :         require(msg.sender == owner, "OriginEOANotOwner");
-      83                 :          0 :         approvedEOAs[_eoaAddress] = false;
-      84                 :            :     }
-      85                 :            : 
-      86                 :            :     function checkFastLaneEOA(address _eoaAddress) view internal {
-      87         [ #  + ]:          8 :         require(approvedEOAs[_eoaAddress] || _eoaAddress == owner, "SenderEOANotApproved");
-      88                 :            :     }
-      89                 :            : 
-      90                 :            :     function isTrustedForwarder(address _forwarder) public view returns (bool) {
-      91                 :         10 :         return _forwarder == PFLAuction;
-      92                 :            :     }
-      93                 :            : 
-      94                 :            :     // Be aware with a fallback fn that:
-      95                 :            :     // `address(this).call(_searcherCallData);` 
-      96                 :            :     // Will hit this if _searcherCallData function is not implemented. 
-      97                 :            :     // And success will be true.
-      98                 :            :     fallback() external payable {
-      99                 :            :         
-     100                 :            :     }
-     101                 :            :     receive() external payable {}
-     102                 :            : 
-     103                 :            :     modifier onlyRelayer {
-     104                 :            :           if (!isTrustedForwarder(msg.sender)) revert("InvalidPermissions");
-     105                 :            :           _;
-     106                 :            :      }
-     107                 :            : }
-     108                 :            : 
-     109                 :            : contract SearcherContractExample is FastLaneSearcherDirectContract {
-     110                 :            :     // Your own MEV contract / functions here 
-     111                 :            :     // NOTE: its security checks must be compatible w/ calls from the FastLane Auction Contract
-     112                 :            : 
-     113                 :            :     address public anAddress; // just a var to change for the placeholder MEV function
-     114                 :            :     uint256 public anAmount; // another var to change for the placeholder MEV function
-     115                 :            : 
-     116                 :            :     function doStuff(address _anAddress, uint256 _anAmount) public payable returns (bool) {
-     117                 :            :         // NOTE: this function can't be external as the FastLaneCall func will call it internally
-     118         [ #  # ]:          6 :         if (msg.sender != address(this)) { 
-     119                 :            :             // NOTE: msg.sender becomes address(this) if using call from inside contract per above example in `fasfastLaneCall`
-     120         [ #  # ]:          0 :             require(approvedEOAs[msg.sender], "SenderEOANotApproved");
-     121                 :            :         }
-     122                 :            :         
-     123                 :            :         // Do MEV stuff here
-     124                 :            :         // placeholder
-     125                 :          6 :         anAddress = _anAddress;
-     126                 :          6 :         anAmount = _anAmount;
-     127                 :          6 :         bool isSuccessful = true;
-     128                 :          6 :         return isSuccessful;
-     129                 :            :     }
-     130                 :            : 
-     131                 :            :     function doFail() public payable {
-     132         [ #  # ]:          2 :         if (msg.sender != address(this)) { 
-     133                 :            :             // NOTE: msg.sender becomes address(this) if using call from inside contract per above example in `fasfastLaneCall`
-     134         [ #  # ]:          0 :             require(approvedEOAs[msg.sender], "SenderEOANotApproved");
-     135                 :            :         }
-     136                 :            :         // Will cause Error(string) of: 0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000f4641494c5f4f4e5f505552504f53450000000000000000000000000000000000
-     137                 :            :         // to bubble up to the relay contract.
-     138                 :            :         // Use the read function `FastLaneRelay.humanizeError(bytes error)` to get a human readable version of an error should your searcher contract fail on a require.
-     139         [ +  # ]:          2 :         require(false,"FAIL_ON_PURPOSE");
-     140                 :            :     }
-     141                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/searcher-direct/index-sort-b.html b/report/contracts/searcher-direct/index-sort-b.html deleted file mode 100644 index 68e7753..0000000 --- a/report/contracts/searcher-direct/index-sort-b.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/searcher-direct - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/searcher-directHitTotalCoverage
Test:lcov.infoLines:232785.2 %
Date:2023-09-07 01:01:29Functions:71070.0 %
Branches:92437.5 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneSearcherDirect.sol -
85.2%85.2%
-
85.2 %23 / 2770.0 %7 / 1037.5 %9 / 24
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/searcher-direct/index-sort-f.html b/report/contracts/searcher-direct/index-sort-f.html deleted file mode 100644 index a343d83..0000000 --- a/report/contracts/searcher-direct/index-sort-f.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/searcher-direct - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/searcher-directHitTotalCoverage
Test:lcov.infoLines:232785.2 %
Date:2023-09-07 01:01:29Functions:71070.0 %
Branches:92437.5 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneSearcherDirect.sol -
85.2%85.2%
-
85.2 %23 / 2770.0 %7 / 1037.5 %9 / 24
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/searcher-direct/index-sort-l.html b/report/contracts/searcher-direct/index-sort-l.html deleted file mode 100644 index 5c0b58f..0000000 --- a/report/contracts/searcher-direct/index-sort-l.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/searcher-direct - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/searcher-directHitTotalCoverage
Test:lcov.infoLines:232785.2 %
Date:2023-09-07 01:01:29Functions:71070.0 %
Branches:92437.5 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneSearcherDirect.sol -
85.2%85.2%
-
85.2 %23 / 2770.0 %7 / 1037.5 %9 / 24
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/searcher-direct/index.html b/report/contracts/searcher-direct/index.html deleted file mode 100644 index e4c5b85..0000000 --- a/report/contracts/searcher-direct/index.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/searcher-direct - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/searcher-directHitTotalCoverage
Test:lcov.infoLines:232785.2 %
Date:2023-09-07 01:01:29Functions:71070.0 %
Branches:92437.5 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneSearcherDirect.sol -
85.2%85.2%
-
85.2 %23 / 2770.0 %7 / 1037.5 %9 / 24
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/searcher-proxy/FastLaneSearcherProxy.sol.func-sort-c.html b/report/contracts/searcher-proxy/FastLaneSearcherProxy.sol.func-sort-c.html deleted file mode 100644 index ef73934..0000000 --- a/report/contracts/searcher-proxy/FastLaneSearcherProxy.sol.func-sort-c.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/searcher-proxy/FastLaneSearcherProxy.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/searcher-proxy - FastLaneSearcherProxy.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0200.0 %
Date:2023-09-07 01:01:29Functions:090.0 %
Branches:0160.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
FastLaneSearcherProxyContract.0
FastLaneSearcherProxyContract.approveFastLaneEOA0
FastLaneSearcherProxyContract.checkFastLaneEOA0
FastLaneSearcherProxyContract.fastLaneCall0
FastLaneSearcherProxyContract.isTrustedForwarder0
FastLaneSearcherProxyContract.revokeFastLaneEOA0
FastLaneSearcherProxyContract.safeTransferETH0
FastLaneSearcherProxyContract.setPFLAuctionAddress0
FastLaneSearcherProxyContract.setSearcherContractAddress0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/searcher-proxy/FastLaneSearcherProxy.sol.func.html b/report/contracts/searcher-proxy/FastLaneSearcherProxy.sol.func.html deleted file mode 100644 index 1b04ea1..0000000 --- a/report/contracts/searcher-proxy/FastLaneSearcherProxy.sol.func.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/searcher-proxy/FastLaneSearcherProxy.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/searcher-proxy - FastLaneSearcherProxy.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0200.0 %
Date:2023-09-07 01:01:29Functions:090.0 %
Branches:0160.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
FastLaneSearcherProxyContract.0
FastLaneSearcherProxyContract.approveFastLaneEOA0
FastLaneSearcherProxyContract.checkFastLaneEOA0
FastLaneSearcherProxyContract.fastLaneCall0
FastLaneSearcherProxyContract.isTrustedForwarder0
FastLaneSearcherProxyContract.revokeFastLaneEOA0
FastLaneSearcherProxyContract.safeTransferETH0
FastLaneSearcherProxyContract.setPFLAuctionAddress0
FastLaneSearcherProxyContract.setSearcherContractAddress0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/searcher-proxy/FastLaneSearcherProxy.sol.gcov.html b/report/contracts/searcher-proxy/FastLaneSearcherProxy.sol.gcov.html deleted file mode 100644 index 25a2552..0000000 --- a/report/contracts/searcher-proxy/FastLaneSearcherProxy.sol.gcov.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/searcher-proxy/FastLaneSearcherProxy.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/searcher-proxy - FastLaneSearcherProxy.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0200.0 %
Date:2023-09-07 01:01:29Functions:090.0 %
Branches:0160.0 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : //SPDX-License-Identifier: Unlicensed
-       2                 :            : pragma solidity ^0.8.16;
-       3                 :            : 
-       4                 :            : import { ReentrancyGuard } from "solmate/utils/ReentrancyGuard.sol";
-       5                 :            : import "openzeppelin-contracts/contracts/utils/Strings.sol";
-       6                 :            : 
-       7                 :            : contract FastLaneSearcherProxyContract is ReentrancyGuard {
-       8                 :            : 
-       9                 :            :     address public owner;
-      10                 :            :     address payable private PFLAuction;
-      11                 :            :     address payable private searcherContract;
-      12                 :            : 
-      13                 :            :     error WrongPermissions();
-      14                 :            :     error OriginEOANotOwner();
-      15                 :            :     error SearcherCallUnsuccessful(bytes retData);
-      16                 :            :     error SearcherInsufficientFunds(uint256 amountToSend, uint256 currentBalance);
-      17                 :            : 
-      18                 :            :     mapping(address => bool) internal approvedEOAs;
-      19                 :            : 
-      20                 :            :     constructor(address _searcherContract) {
-      21                 :            :         owner = msg.sender;
-      22                 :            :         searcherContract = payable(_searcherContract);
-      23                 :            :     }
-      24                 :            : 
-      25                 :            :     // The FastLane Auction contract will call this function
-      26                 :            :     // The `onlyRelayer` modifier makes sure the calls can only come from PFL or will revert
-      27                 :            :     // PFL will pass along the original msg.sender as _sender for the searcher to do additional checks
-      28                 :            :     // Do NOT forget `onlyRelayer` and `checkFastLaneEOA(_sender);` or ANYONE will be able to call your contract with arbitrary calldata
-      29                 :            :     function fastLaneCall(
-      30                 :            :             address _sender, // Relay will always set this to msg.sender that called it. Ideally you (owner) or an approvedEOA.
-      31                 :            :             uint256 _bidAmount,
-      32                 :            :             bytes calldata _searcherCallData // contains func selector and calldata for your MEV transaction ie: abi.encodeWithSignature("doStuff(address,uint256)", 0xF00, 1212);
-      33                 :            :     ) external payable onlyRelayer nonReentrant returns (bool, bytes memory) {
-      34                 :            :         
-      35                 :            :         // Make sure it's your own EOA that's calling your contract 
-      36                 :          0 :         checkFastLaneEOA(_sender);
-      37                 :            : 
-      38                 :            :         // Execute the searcher's intended function
-      39                 :            :         // /!\ Don't forget to whitelist `searcherContract` called function
-      40                 :            :         // to allow this contract.
-      41                 :          0 :         (bool success, bytes memory returnedData) = searcherContract.call(_searcherCallData);
-      42                 :            :         
-      43                 :            :         // If the call didn't turn out the way you wanted, revert either here or inside your MEV function itself
-      44         [ #  # ]:          0 :         if (!success) {
-      45                 :          0 :             return (false, returnedData);
-      46                 :            :         }
-      47                 :            : 
-      48                 :            :         // Balance check then pay FastLane Auction Handler contract at the end
-      49         [ #  # ]:          0 :         require(
-      50                 :            :             (address(this).balance >= _bidAmount), 
-      51                 :            :             string(abi.encodePacked("SearcherInsufficientFunds  ", Strings.toString(_bidAmount), " ", Strings.toString(address(this).balance)))
-      52                 :            :         );
-      53                 :            : 
-      54                 :          0 :         safeTransferETH(PFLAuction, _bidAmount);
-      55                 :            :         
-      56                 :            :         // /!\ Important to return success true or relay will revert.
-      57                 :            :         // In case of success == false, `returnedData` will be used as revert message that can be decoded with `.humanizeError()`
-      58                 :          0 :         return (success, returnedData);
-      59                 :            :     }
-      60                 :            : 
-      61                 :            :     // Other functions / modifiers that are necessary for FastLane integration:
-      62                 :            :     // NOTE: you can use your own versions of these, or find alternative ways
-      63                 :            :     // to implement similar safety checks. Please be careful when altering!
-      64                 :            :     function safeTransferETH(address to, uint256 amount) internal {
-      65                 :          0 :         bool success;
-      66                 :            : 
-      67                 :            :         assembly {
-      68                 :            :             // Transfer the ETH and store if it succeeded or not.
-      69                 :          0 :             success := call(gas(), to, amount, 0, 0, 0, 0)
-      70                 :            :         }
-      71                 :            : 
-      72         [ #  # ]:          0 :         require(success, "ETH_TRANSFER_FAILED");
-      73                 :            :     }
-      74                 :            : 
-      75                 :            :     function setPFLAuctionAddress(address _pflAuction) public {
-      76         [ #  # ]:          0 :         require(msg.sender == owner, "OriginEOANotOwner");
-      77                 :          0 :         PFLAuction = payable(_pflAuction);
-      78                 :            :     }
-      79                 :            : 
-      80                 :            :     function setSearcherContractAddress(address _searcherContract) public {
-      81         [ #  # ]:          0 :         require(msg.sender == owner, "OriginEOANotOwner");
-      82                 :          0 :         searcherContract = payable(_searcherContract);
-      83                 :            :     }
-      84                 :            : 
-      85                 :            :     function approveFastLaneEOA(address _eoaAddress) public {
-      86         [ #  # ]:          0 :         require(msg.sender == owner, "OriginEOANotOwner");
-      87                 :          0 :         approvedEOAs[_eoaAddress] = true;
-      88                 :            :     }
-      89                 :            : 
-      90                 :            :     function revokeFastLaneEOA(address _eoaAddress) public {
-      91         [ #  # ]:          0 :         require(msg.sender == owner, "OriginEOANotOwner");
-      92                 :          0 :         approvedEOAs[_eoaAddress] = false;
-      93                 :            :     }
-      94                 :            : 
-      95                 :            :     function checkFastLaneEOA(address _eoaAddress) view internal {
-      96         [ #  # ]:          0 :         require(approvedEOAs[_eoaAddress] || _eoaAddress == owner, "SenderEOANotApproved");
-      97                 :            :     }
-      98                 :            : 
-      99                 :            :     function isTrustedForwarder(address _forwarder) public view returns (bool) {
-     100                 :          0 :         return _forwarder == PFLAuction;
-     101                 :            :     }
-     102                 :            : 
-     103                 :            :     // Be aware with a fallback fn that:
-     104                 :            :     // `address(this).call(_searcherCallData);` 
-     105                 :            :     // Will hit this if _searcherCallData function is not implemented. 
-     106                 :            :     // And success will be true.
-     107                 :            :     fallback() external payable {
-     108                 :            :         
-     109                 :            :     }
-     110                 :            :     receive() external payable {}
-     111                 :            : 
-     112                 :            :     modifier onlyRelayer {
-     113                 :            :           if (!isTrustedForwarder(msg.sender)) revert("InvalidPermissions");
-     114                 :            :           _;
-     115                 :            :      }
-     116                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/searcher-proxy/index-sort-b.html b/report/contracts/searcher-proxy/index-sort-b.html deleted file mode 100644 index e9bb2c9..0000000 --- a/report/contracts/searcher-proxy/index-sort-b.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/searcher-proxy - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/searcher-proxyHitTotalCoverage
Test:lcov.infoLines:0200.0 %
Date:2023-09-07 01:01:29Functions:090.0 %
Branches:0160.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneSearcherProxy.sol -
0.0%
-
0.0 %0 / 200.0 %0 / 90.0 %0 / 16
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/searcher-proxy/index-sort-f.html b/report/contracts/searcher-proxy/index-sort-f.html deleted file mode 100644 index 0b838ec..0000000 --- a/report/contracts/searcher-proxy/index-sort-f.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/searcher-proxy - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/searcher-proxyHitTotalCoverage
Test:lcov.infoLines:0200.0 %
Date:2023-09-07 01:01:29Functions:090.0 %
Branches:0160.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneSearcherProxy.sol -
0.0%
-
0.0 %0 / 200.0 %0 / 90.0 %0 / 16
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/searcher-proxy/index-sort-l.html b/report/contracts/searcher-proxy/index-sort-l.html deleted file mode 100644 index 619828c..0000000 --- a/report/contracts/searcher-proxy/index-sort-l.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/searcher-proxy - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/searcher-proxyHitTotalCoverage
Test:lcov.infoLines:0200.0 %
Date:2023-09-07 01:01:29Functions:090.0 %
Branches:0160.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneSearcherProxy.sol -
0.0%
-
0.0 %0 / 200.0 %0 / 90.0 %0 / 16
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/contracts/searcher-proxy/index.html b/report/contracts/searcher-proxy/index.html deleted file mode 100644 index 4fc6915..0000000 --- a/report/contracts/searcher-proxy/index.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - contracts/searcher-proxy - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - contracts/searcher-proxyHitTotalCoverage
Test:lcov.infoLines:0200.0 %
Date:2023-09-07 01:01:29Functions:090.0 %
Branches:0160.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
FastLaneSearcherProxy.sol -
0.0%
-
0.0 %0 / 200.0 %0 / 90.0 %0 / 16
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/emerald.png b/report/emerald.png deleted file mode 100644 index 38ad4f4068b935643d2486f323005fb294a9bd7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^Jb!lvI6;R0X`wF(yt=9xVZRt1vCRixIA4P dLn>}1Cji+@42)0J?}79&c)I$ztaD0e0sy@GAL0N2 diff --git a/report/gcov.css b/report/gcov.css deleted file mode 100644 index 0fcdff1..0000000 --- a/report/gcov.css +++ /dev/null @@ -1,519 +0,0 @@ -/* All views: initial background and text color */ -body -{ - color: #000000; - background-color: #ffffff; -} - -/* All views: standard link format*/ -a:link -{ - color: #284fa8; - text-decoration: underline; -} - -/* All views: standard link - visited format */ -a:visited -{ - color: #00cb40; - text-decoration: underline; -} - -/* All views: standard link - activated format */ -a:active -{ - color: #ff0040; - text-decoration: underline; -} - -/* All views: main title format */ -td.title -{ - text-align: center; - padding-bottom: 10px; - font-family: sans-serif; - font-size: 20pt; - font-style: italic; - font-weight: bold; -} - -/* All views: header item format */ -td.headerItem -{ - text-align: right; - padding-right: 6px; - font-family: sans-serif; - font-weight: bold; - vertical-align: top; - white-space: nowrap; -} - -/* All views: header item value format */ -td.headerValue -{ - text-align: left; - color: #284fa8; - font-family: sans-serif; - font-weight: bold; - white-space: nowrap; -} - -/* All views: header item coverage table heading */ -td.headerCovTableHead -{ - text-align: center; - padding-right: 6px; - padding-left: 6px; - padding-bottom: 0px; - font-family: sans-serif; - font-size: 80%; - white-space: nowrap; -} - -/* All views: header item coverage table entry */ -td.headerCovTableEntry -{ - text-align: right; - color: #284fa8; - font-family: sans-serif; - font-weight: bold; - white-space: nowrap; - padding-left: 12px; - padding-right: 4px; - background-color: #dae7fe; -} - -/* All views: header item coverage table entry for high coverage rate */ -td.headerCovTableEntryHi -{ - text-align: right; - color: #000000; - font-family: sans-serif; - font-weight: bold; - white-space: nowrap; - padding-left: 12px; - padding-right: 4px; - background-color: #a7fc9d; -} - -/* All views: header item coverage table entry for medium coverage rate */ -td.headerCovTableEntryMed -{ - text-align: right; - color: #000000; - font-family: sans-serif; - font-weight: bold; - white-space: nowrap; - padding-left: 12px; - padding-right: 4px; - background-color: #ffea20; -} - -/* All views: header item coverage table entry for ow coverage rate */ -td.headerCovTableEntryLo -{ - text-align: right; - color: #000000; - font-family: sans-serif; - font-weight: bold; - white-space: nowrap; - padding-left: 12px; - padding-right: 4px; - background-color: #ff0000; -} - -/* All views: header legend value for legend entry */ -td.headerValueLeg -{ - text-align: left; - color: #000000; - font-family: sans-serif; - font-size: 80%; - white-space: nowrap; - padding-top: 4px; -} - -/* All views: color of horizontal ruler */ -td.ruler -{ - background-color: #6688d4; -} - -/* All views: version string format */ -td.versionInfo -{ - text-align: center; - padding-top: 2px; - font-family: sans-serif; - font-style: italic; -} - -/* Directory view/File view (all)/Test case descriptions: - table headline format */ -td.tableHead -{ - text-align: center; - color: #ffffff; - background-color: #6688d4; - font-family: sans-serif; - font-size: 120%; - font-weight: bold; - white-space: nowrap; - padding-left: 4px; - padding-right: 4px; -} - -span.tableHeadSort -{ - padding-right: 4px; -} - -/* Directory view/File view (all): filename entry format */ -td.coverFile -{ - text-align: left; - padding-left: 10px; - padding-right: 20px; - color: #284fa8; - background-color: #dae7fe; - font-family: monospace; -} - -/* Directory view/File view (all): bar-graph entry format*/ -td.coverBar -{ - padding-left: 10px; - padding-right: 10px; - background-color: #dae7fe; -} - -/* Directory view/File view (all): bar-graph outline color */ -td.coverBarOutline -{ - background-color: #000000; -} - -/* Directory view/File view (all): percentage entry for files with - high coverage rate */ -td.coverPerHi -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #a7fc9d; - font-weight: bold; - font-family: sans-serif; -} - -/* Directory view/File view (all): line count entry for files with - high coverage rate */ -td.coverNumHi -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #a7fc9d; - white-space: nowrap; - font-family: sans-serif; -} - -/* Directory view/File view (all): percentage entry for files with - medium coverage rate */ -td.coverPerMed -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #ffea20; - font-weight: bold; - font-family: sans-serif; -} - -/* Directory view/File view (all): line count entry for files with - medium coverage rate */ -td.coverNumMed -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #ffea20; - white-space: nowrap; - font-family: sans-serif; -} - -/* Directory view/File view (all): percentage entry for files with - low coverage rate */ -td.coverPerLo -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #ff0000; - font-weight: bold; - font-family: sans-serif; -} - -/* Directory view/File view (all): line count entry for files with - low coverage rate */ -td.coverNumLo -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #ff0000; - white-space: nowrap; - font-family: sans-serif; -} - -/* File view (all): "show/hide details" link format */ -a.detail:link -{ - color: #B8D0FF; - font-size:80%; -} - -/* File view (all): "show/hide details" link - visited format */ -a.detail:visited -{ - color: #B8D0FF; - font-size:80%; -} - -/* File view (all): "show/hide details" link - activated format */ -a.detail:active -{ - color: #ffffff; - font-size:80%; -} - -/* File view (detail): test name entry */ -td.testName -{ - text-align: right; - padding-right: 10px; - background-color: #dae7fe; - font-family: sans-serif; -} - -/* File view (detail): test percentage entry */ -td.testPer -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #dae7fe; - font-family: sans-serif; -} - -/* File view (detail): test lines count entry */ -td.testNum -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #dae7fe; - font-family: sans-serif; -} - -/* Test case descriptions: test name format*/ -dt -{ - font-family: sans-serif; - font-weight: bold; -} - -/* Test case descriptions: description table body */ -td.testDescription -{ - padding-top: 10px; - padding-left: 30px; - padding-bottom: 10px; - padding-right: 30px; - background-color: #dae7fe; -} - -/* Source code view: function entry */ -td.coverFn -{ - text-align: left; - padding-left: 10px; - padding-right: 20px; - color: #284fa8; - background-color: #dae7fe; - font-family: monospace; -} - -/* Source code view: function entry zero count*/ -td.coverFnLo -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #ff0000; - font-weight: bold; - font-family: sans-serif; -} - -/* Source code view: function entry nonzero count*/ -td.coverFnHi -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #dae7fe; - font-weight: bold; - font-family: sans-serif; -} - -/* Source code view: source code format */ -pre.source -{ - font-family: monospace; - white-space: pre; - margin-top: 2px; -} - -/* Source code view: line number format */ -span.lineNum -{ - background-color: #efe383; -} - -/* Source code view: format for lines which were executed */ -td.lineCov, -span.lineCov -{ - background-color: #cad7fe; -} - -/* Source code view: format for Cov legend */ -span.coverLegendCov -{ - padding-left: 10px; - padding-right: 10px; - padding-bottom: 2px; - background-color: #cad7fe; -} - -/* Source code view: format for lines which were not executed */ -td.lineNoCov, -span.lineNoCov -{ - background-color: #ff6230; -} - -/* Source code view: format for NoCov legend */ -span.coverLegendNoCov -{ - padding-left: 10px; - padding-right: 10px; - padding-bottom: 2px; - background-color: #ff6230; -} - -/* Source code view (function table): standard link - visited format */ -td.lineNoCov > a:visited, -td.lineCov > a:visited -{ - color: #000000; - text-decoration: underline; -} - -/* Source code view: format for lines which were executed only in a - previous version */ -span.lineDiffCov -{ - background-color: #b5f7af; -} - -/* Source code view: format for branches which were executed - * and taken */ -span.branchCov -{ - background-color: #cad7fe; -} - -/* Source code view: format for branches which were executed - * but not taken */ -span.branchNoCov -{ - background-color: #ff6230; -} - -/* Source code view: format for branches which were not executed */ -span.branchNoExec -{ - background-color: #ff6230; -} - -/* Source code view: format for the source code heading line */ -pre.sourceHeading -{ - white-space: pre; - font-family: monospace; - font-weight: bold; - margin: 0px; -} - -/* All views: header legend value for low rate */ -td.headerValueLegL -{ - font-family: sans-serif; - text-align: center; - white-space: nowrap; - padding-left: 4px; - padding-right: 2px; - background-color: #ff0000; - font-size: 80%; -} - -/* All views: header legend value for med rate */ -td.headerValueLegM -{ - font-family: sans-serif; - text-align: center; - white-space: nowrap; - padding-left: 2px; - padding-right: 2px; - background-color: #ffea20; - font-size: 80%; -} - -/* All views: header legend value for hi rate */ -td.headerValueLegH -{ - font-family: sans-serif; - text-align: center; - white-space: nowrap; - padding-left: 2px; - padding-right: 4px; - background-color: #a7fc9d; - font-size: 80%; -} - -/* All views except source code view: legend format for low coverage */ -span.coverLegendCovLo -{ - padding-left: 10px; - padding-right: 10px; - padding-top: 2px; - background-color: #ff0000; -} - -/* All views except source code view: legend format for med coverage */ -span.coverLegendCovMed -{ - padding-left: 10px; - padding-right: 10px; - padding-top: 2px; - background-color: #ffea20; -} - -/* All views except source code view: legend format for hi coverage */ -span.coverLegendCovHi -{ - padding-left: 10px; - padding-right: 10px; - padding-top: 2px; - background-color: #a7fc9d; -} diff --git a/report/glass.png b/report/glass.png deleted file mode 100644 index e1abc00680a3093c49fdb775ae6bdb6764c95af2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)gaEa{HEjtmSN`?>!lvI6;R0X`wF z|Ns97GD8ntt^-nxB|(0{3=Yq3q=7g|-tI089jvk*Kn`btM`SSr1Gf+eGhVt|_XjA* zUgGKN%6^Gmn4d%Ph(nkFP>9RZ#WAE}PI3Z}&BVayv3^M*kj3EX>gTe~DWM4f=_Dpv diff --git a/report/index-sort-b.html b/report/index-sort-b.html deleted file mode 100644 index 0d30347..0000000 --- a/report/index-sort-b.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - LCOV - lcov.info - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top levelHitTotalCoverage
Test:lcov.infoLines:32651563.3 %
Date:2023-09-07 01:01:29Functions:8011072.7 %
Branches:12721459.3 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Directory Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
test/legacy-test -
0.0%
-
0.0 %0 / 270.0 %0 / 30.0 %0 / 2
contracts/helpers -
0.0%
-
0.0 %0 / 50.0 %0 / 10.0 %0 / 2
script -
0.0%
-
0.0 %0 / 160.0 %0 / 20.0 %0 / 4
contracts -
0.0%
-
0.0 %0 / 110.0 %0 / 30.0 %0 / 6
script/legacy-script -
0.0%
-
0.0 %0 / 710.0 %0 / 40.0 %0 / 12
contracts/searcher-proxy -
0.0%
-
0.0 %0 / 200.0 %0 / 90.0 %0 / 16
test -
84.0%84.0%
-
84.0 %21 / 2575.0 %6 / 837.5 %3 / 8
contracts/searcher-direct -
85.2%85.2%
-
85.2 %23 / 2770.0 %7 / 1037.5 %9 / 24
contracts/auction-handler -
76.2%76.2%
-
76.2 %99 / 13088.5 %23 / 2668.2 %45 / 66
contracts/legacy -
100.0%
-
100.0 %178 / 178100.0 %43 / 4394.6 %70 / 74
test/mocks -
100.0%
-
100.0 %5 / 5100.0 %1 / 1-0 / 0
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/index-sort-f.html b/report/index-sort-f.html deleted file mode 100644 index 62bc015..0000000 --- a/report/index-sort-f.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - LCOV - lcov.info - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top levelHitTotalCoverage
Test:lcov.infoLines:32651563.3 %
Date:2023-09-07 01:01:29Functions:8011072.7 %
Branches:12721459.3 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Directory Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
contracts/helpers -
0.0%
-
0.0 %0 / 50.0 %0 / 10.0 %0 / 2
script -
0.0%
-
0.0 %0 / 160.0 %0 / 20.0 %0 / 4
test/legacy-test -
0.0%
-
0.0 %0 / 270.0 %0 / 30.0 %0 / 2
contracts -
0.0%
-
0.0 %0 / 110.0 %0 / 30.0 %0 / 6
script/legacy-script -
0.0%
-
0.0 %0 / 710.0 %0 / 40.0 %0 / 12
contracts/searcher-proxy -
0.0%
-
0.0 %0 / 200.0 %0 / 90.0 %0 / 16
contracts/searcher-direct -
85.2%85.2%
-
85.2 %23 / 2770.0 %7 / 1037.5 %9 / 24
test -
84.0%84.0%
-
84.0 %21 / 2575.0 %6 / 837.5 %3 / 8
contracts/auction-handler -
76.2%76.2%
-
76.2 %99 / 13088.5 %23 / 2668.2 %45 / 66
test/mocks -
100.0%
-
100.0 %5 / 5100.0 %1 / 1-0 / 0
contracts/legacy -
100.0%
-
100.0 %178 / 178100.0 %43 / 4394.6 %70 / 74
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/index-sort-l.html b/report/index-sort-l.html deleted file mode 100644 index 5cf40b3..0000000 --- a/report/index-sort-l.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - LCOV - lcov.info - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top levelHitTotalCoverage
Test:lcov.infoLines:32651563.3 %
Date:2023-09-07 01:01:29Functions:8011072.7 %
Branches:12721459.3 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Directory Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
contracts/helpers -
0.0%
-
0.0 %0 / 50.0 %0 / 10.0 %0 / 2
contracts -
0.0%
-
0.0 %0 / 110.0 %0 / 30.0 %0 / 6
script -
0.0%
-
0.0 %0 / 160.0 %0 / 20.0 %0 / 4
contracts/searcher-proxy -
0.0%
-
0.0 %0 / 200.0 %0 / 90.0 %0 / 16
test/legacy-test -
0.0%
-
0.0 %0 / 270.0 %0 / 30.0 %0 / 2
script/legacy-script -
0.0%
-
0.0 %0 / 710.0 %0 / 40.0 %0 / 12
contracts/auction-handler -
76.2%76.2%
-
76.2 %99 / 13088.5 %23 / 2668.2 %45 / 66
test -
84.0%84.0%
-
84.0 %21 / 2575.0 %6 / 837.5 %3 / 8
contracts/searcher-direct -
85.2%85.2%
-
85.2 %23 / 2770.0 %7 / 1037.5 %9 / 24
test/mocks -
100.0%
-
100.0 %5 / 5100.0 %1 / 1-0 / 0
contracts/legacy -
100.0%
-
100.0 %178 / 178100.0 %43 / 4394.6 %70 / 74
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/index.html b/report/index.html deleted file mode 100644 index e9b2654..0000000 --- a/report/index.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - LCOV - lcov.info - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top levelHitTotalCoverage
Test:lcov.infoLines:32651563.3 %
Date:2023-09-07 01:01:29Functions:8011072.7 %
Branches:12721459.3 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Directory Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
contracts -
0.0%
-
0.0 %0 / 110.0 %0 / 30.0 %0 / 6
contracts/auction-handler -
76.2%76.2%
-
76.2 %99 / 13088.5 %23 / 2668.2 %45 / 66
contracts/helpers -
0.0%
-
0.0 %0 / 50.0 %0 / 10.0 %0 / 2
contracts/legacy -
100.0%
-
100.0 %178 / 178100.0 %43 / 4394.6 %70 / 74
contracts/searcher-direct -
85.2%85.2%
-
85.2 %23 / 2770.0 %7 / 1037.5 %9 / 24
contracts/searcher-proxy -
0.0%
-
0.0 %0 / 200.0 %0 / 90.0 %0 / 16
script -
0.0%
-
0.0 %0 / 160.0 %0 / 20.0 %0 / 4
script/legacy-script -
0.0%
-
0.0 %0 / 710.0 %0 / 40.0 %0 / 12
test -
84.0%84.0%
-
84.0 %21 / 2575.0 %6 / 837.5 %3 / 8
test/legacy-test -
0.0%
-
0.0 %0 / 270.0 %0 / 30.0 %0 / 2
test/mocks -
100.0%
-
100.0 %5 / 5100.0 %1 / 1-0 / 0
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/ruby.png b/report/ruby.png deleted file mode 100644 index 991b6d4ec9e78be165e3ef757eed1aada287364d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^FceV#7`HfI^%F z9+AZi4BSE>%y{W;-5;PJOS+@4BLl<6e(pbstUx|nfKQ0)e^Y%R^MdiLxj>4`)5S5Q b;#P73kj=!v_*DHKNFRfztDnm{r-UW|iOwIS diff --git a/report/script/EOADeploy.s.sol.func-sort-c.html b/report/script/EOADeploy.s.sol.func-sort-c.html deleted file mode 100644 index 9080c55..0000000 --- a/report/script/EOADeploy.s.sol.func-sort-c.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - LCOV - lcov.info - script/EOADeploy.s.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script - EOADeploy.s.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0160.0 %
Date:2023-09-07 01:01:29Functions:020.0 %
Branches:040.0 %
-
- -
- - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
Deploy.getArgs0
Deploy.run0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/EOADeploy.s.sol.func.html b/report/script/EOADeploy.s.sol.func.html deleted file mode 100644 index 91c3501..0000000 --- a/report/script/EOADeploy.s.sol.func.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - LCOV - lcov.info - script/EOADeploy.s.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script - EOADeploy.s.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0160.0 %
Date:2023-09-07 01:01:29Functions:020.0 %
Branches:040.0 %
-
- -
- - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
Deploy.getArgs0
Deploy.run0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/EOADeploy.s.sol.gcov.html b/report/script/EOADeploy.s.sol.gcov.html deleted file mode 100644 index 3661c02..0000000 --- a/report/script/EOADeploy.s.sol.gcov.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - LCOV - lcov.info - script/EOADeploy.s.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script - EOADeploy.s.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0160.0 %
Date:2023-09-07 01:01:29Functions:020.0 %
Branches:040.0 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : // SPDX-License-Identifier: AGPL-3.0-only
-       2                 :            : pragma solidity ^0.8.15;
-       3                 :            : 
-       4                 :            : import "forge-std/Test.sol";
-       5                 :            : import "forge-std/Script.sol";
-       6                 :            : 
-       7                 :            : import {FastLaneAuctionHandler} from "../contracts/auction-handler/FastLaneAuctionHandler.sol";
-       8                 :            : 
-       9                 :            : contract Deploy is Script {
-      10                 :            : 
-      11                 :            : 
-      12                 :            :     address public fastlane;
-      13                 :            : 
-      14                 :            :     mapping(uint256 => address) public gelatoOpsAddresses;
-      15                 :            :     mapping(uint256 => address) public wrappedNativeAddresses;
-      16                 :            : 
-      17                 :            : 
-      18                 :            :     function getArgs() public view returns (address initial_bid_token, address ops) {
-      19                 :          0 :         ops = gelatoOpsAddresses[block.chainid];
-      20                 :          0 :         initial_bid_token = wrappedNativeAddresses[block.chainid];
-      21                 :            :     }
-      22                 :            : 
-      23                 :            :     function run() public {
-      24                 :            : 
-      25                 :          0 :         gelatoOpsAddresses[1] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F;
-      26                 :          0 :         gelatoOpsAddresses[137] = 0x527a819db1eb0e34426297b03bae11F2f8B3A19E;
-      27                 :          0 :         gelatoOpsAddresses[80001] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F;
-      28                 :          0 :         gelatoOpsAddresses[31337] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F;
-      29                 :            : 
-      30                 :          0 :         wrappedNativeAddresses[1] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
-      31                 :          0 :         wrappedNativeAddresses[137] = 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270;
-      32                 :          0 :         wrappedNativeAddresses[80001] = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889;
-      33                 :          0 :         wrappedNativeAddresses[31337] = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889;
-      34                 :            : 
-      35                 :            : 
-      36                 :          0 :         (address initial_bid_token, address ops) = getArgs();
-      37                 :            : 
-      38                 :            : 
-      39         [ #  # ]:          0 :         require(ops != address(0), "O(o)ps");
-      40         [ #  # ]:          0 :         require(initial_bid_token != address(0), "Wrapped");
-      41                 :            : 
-      42                 :            :         // Unusable until vm.remember: https://github.com/foundry-rs/foundry/pull/2299
-      43                 :            :         // uint256 deployerPrivateKey = vm.deriveKey(vm.envString("TESTNET_MNEMONIC"), 0);
-      44                 :            :         // vm.startBroadcast(vm.addr(deployerPrivateKey));
-      45                 :            : 
-      46                 :          0 :         vm.startBroadcast();
-      47                 :          0 :         fastlane = address(new FastLaneAuctionHandler());
-      48                 :            : 
-      49                 :          0 :         console2.log(fastlane);
-      50                 :            :     }
-      51                 :            : 
-      52                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/PreProxyDeploy.s.sol.func-sort-c.html b/report/script/PreProxyDeploy.s.sol.func-sort-c.html deleted file mode 100644 index 9810e0e..0000000 --- a/report/script/PreProxyDeploy.s.sol.func-sort-c.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - LCOV - lcov.info - script/PreProxyDeploy.s.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script - PreProxyDeploy.s.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:060.0 %
Date:2022-08-30 00:50:20Functions:010.0 %
Branches:00-
-
- -
- - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
Deploy.run0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/PreProxyDeploy.s.sol.func.html b/report/script/PreProxyDeploy.s.sol.func.html deleted file mode 100644 index de04626..0000000 --- a/report/script/PreProxyDeploy.s.sol.func.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - LCOV - lcov.info - script/PreProxyDeploy.s.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script - PreProxyDeploy.s.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:060.0 %
Date:2022-08-30 00:50:20Functions:010.0 %
Branches:00-
-
- -
- - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
Deploy.run0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/PreProxyDeploy.s.sol.gcov.html b/report/script/PreProxyDeploy.s.sol.gcov.html deleted file mode 100644 index b2e1ad6..0000000 --- a/report/script/PreProxyDeploy.s.sol.gcov.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - LCOV - lcov.info - script/PreProxyDeploy.s.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script - PreProxyDeploy.s.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:060.0 %
Date:2022-08-30 00:50:20Functions:010.0 %
Branches:00-
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : // SPDX-License-Identifier: AGPL-3.0-only
-       2                 :            : pragma solidity ^0.8.15;
-       3                 :            : 
-       4                 :            : import "forge-std/Test.sol";
-       5                 :            : import "forge-std/Script.sol";
-       6                 :            : 
-       7                 :            : import {FastLaneFactory} from "contracts/FastLaneFactory.sol";
-       8                 :            : 
-       9                 :            : contract Deploy is Script {
-      10                 :            :     FastLaneFactory fastlaneFactoryV0;
-      11                 :            : 
-      12                 :            :     function run() public {
-      13                 :            : 
-      14                 :          0 :         vm.startBroadcast();
-      15                 :          0 :         bytes32 salt = bytes32("hello");
-      16                 :          0 :         FastLaneFactory FLF = new FastLaneFactory(salt);
-      17                 :            : 
-      18                 :          0 :         address deployed = FLF.fastlane();
-      19                 :          0 :         console2.log(address(FLF));
-      20                 :          0 :         console2.log(deployed);
-      21                 :            :     }
-      22                 :            : 
-      23                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/UUPSDeploy.s.sol.func-sort-c.html b/report/script/UUPSDeploy.s.sol.func-sort-c.html deleted file mode 100644 index 3a1e290..0000000 --- a/report/script/UUPSDeploy.s.sol.func-sort-c.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - LCOV - lcov.info - script/UUPSDeploy.s.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script - UUPSDeploy.s.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0540.0 %
Date:2022-11-15 17:07:48Functions:020.0 %
Branches:080.0 %
-
- -
- - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
Deploy.getArgs0
Deploy.run0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/UUPSDeploy.s.sol.func.html b/report/script/UUPSDeploy.s.sol.func.html deleted file mode 100644 index 0c1546e..0000000 --- a/report/script/UUPSDeploy.s.sol.func.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - LCOV - lcov.info - script/UUPSDeploy.s.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script - UUPSDeploy.s.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0540.0 %
Date:2022-11-15 17:07:48Functions:020.0 %
Branches:080.0 %
-
- -
- - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
Deploy.getArgs0
Deploy.run0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/UUPSDeploy.s.sol.gcov.html b/report/script/UUPSDeploy.s.sol.gcov.html deleted file mode 100644 index fc9e284..0000000 --- a/report/script/UUPSDeploy.s.sol.gcov.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - LCOV - lcov.info - script/UUPSDeploy.s.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script - UUPSDeploy.s.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0540.0 %
Date:2022-11-15 17:07:48Functions:020.0 %
Branches:080.0 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : // SPDX-License-Identifier: AGPL-3.0-only
-       2                 :            : pragma solidity 0.8.16;
-       3                 :            : 
-       4                 :            : import "forge-std/Test.sol";
-       5                 :            : import "forge-std/Script.sol";
-       6                 :            : 
-       7                 :            : import {FastLaneAuction} from "../contracts/legacy/FastLaneLegacyAuction.sol";
-       8                 :            : import {ERC1967Proxy} from "openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol";
-       9                 :            : 
-      10                 :            : contract Deploy is Script {
-      11                 :            : 
-      12                 :            : 
-      13                 :            :     address public fastlaneImplementation;
-      14                 :            : 
-      15                 :            :     mapping(uint256 => address) public gelatoOpsAddresses;
-      16                 :            :     mapping(uint256 => address) public wrappedNativeAddresses;
-      17                 :            : 
-      18                 :            : 
-      19                 :            :     function getArgs() public view returns (address initial_bid_token, address ops) {
-      20                 :          0 :         ops = gelatoOpsAddresses[block.chainid];
-      21                 :          0 :         initial_bid_token = wrappedNativeAddresses[block.chainid];
-      22                 :            :     }
-      23                 :            : 
-      24                 :            :     function run() public {
-      25                 :            : 
-      26                 :          0 :         gelatoOpsAddresses[1] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F;
-      27                 :          0 :         gelatoOpsAddresses[137] = 0x527a819db1eb0e34426297b03bae11F2f8B3A19E;
-      28                 :          0 :         gelatoOpsAddresses[80001] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F;
-      29                 :          0 :         gelatoOpsAddresses[31337] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F;
-      30                 :            : 
-      31                 :          0 :         wrappedNativeAddresses[1] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
-      32                 :          0 :         wrappedNativeAddresses[137] = 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270;
-      33                 :          0 :         wrappedNativeAddresses[80001] = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889;
-      34                 :          0 :         wrappedNativeAddresses[31337] = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889;
-      35                 :            : 
-      36                 :            : 
-      37                 :          0 :         (address initial_bid_token, address ops) = getArgs();
-      38                 :            : 
-      39                 :            : 
-      40         [ #  # ]:          0 :         require(ops != address(0), "O(o)ps");
-      41         [ #  # ]:          0 :         require(initial_bid_token != address(0), "Wrapped");
-      42                 :            : 
-      43                 :          0 :         vm.startBroadcast();
-      44                 :            : 
-      45                 :          0 :         bytes32 proxySaltStr = 0xb225d27dc65c353234f5c8ec7c01d2a08967b60d774b801949184d7dfe8a1b9f;
-      46                 :          0 :         bytes32 implementationSaltStr = 0x2141af04bf09baab736a447148a230ae150f8f6fc929d6c6f2ccc364f364fb5a; // 0x111be7a544ba60d162f5d75ea6bda7254d650d8b
-      47                 :            : 
-      48                 :          0 :         address foundryFactory = 0x4e59b44847b379578588920cA78FbF26c0B4956C;
-      49                 :            : 
-      50                 :          0 :         address eoa = msg.sender;
-      51                 :            : 
-      52                 :            : 
-      53                 :          0 :         console2.log("CREATE2 Implementation Predict Bytecode:");
-      54                 :            :         // Copy this into init_code_implementation.txt
-      55                 :          0 :         console2.logBytes(abi.encodePacked(type(FastLaneAuction).creationCode, abi.encode(eoa)));
-      56                 :            : 
-      57                 :            : 
-      58                 :          0 :         FastLaneAuction FLAImplementation = new FastLaneAuction{salt: implementationSaltStr}(eoa); // 0x111be7a544ba60d162f5d75ea6bda7254d650d8b
-      59                 :          0 :         fastlaneImplementation = address(FLAImplementation); 
-      60                 :            : 
-      61                 :          0 :         console2.log("Implementation Deployed at:");
-      62                 :          0 :         console2.log(fastlaneImplementation);
-      63                 :          0 :         console2.log(fastlaneImplementation.code.length);
-      64                 :          0 :         console2.log("------------------------------------");
-      65                 :            : 
-      66                 :          0 :         console2.log("Current Sender:");
-      67                 :          0 :         console2.log(msg.sender);
-      68                 :          0 :         console2.log("------------------------------------");
-      69                 :            : 
-      70                 :            :         // Call that will be made after deploy of Proxy
-      71                 :            :         // will transfer ownership to `eoa` after receiving it from `foundryFactory`
-      72                 :          0 :         bytes memory encodedPostProxyDeployCall = abi.encodeWithSignature("initialize(address)", eoa);
-      73                 :            : 
-      74                 :          0 :         console2.log("encodedPostProxyDeployCall Bytecode:");
-      75                 :          0 :         console2.logBytes(encodedPostProxyDeployCall);
-      76                 :            : 
-      77                 :            : 
-      78                 :            : 
-      79                 :          0 :         console2.log("------------------------------------");
-      80                 :          0 :         ERC1967Proxy proxy = new ERC1967Proxy{salt: proxySaltStr}(fastlaneImplementation, encodedPostProxyDeployCall); 
-      81                 :            : 
-      82                 :            : 
-      83                 :          0 :         console2.log("Proxy Bytecode:");
-      84                 :          0 :         console2.logBytes(address(proxy).code);
-      85                 :          0 :         console2.log("------------------------------------");
-      86                 :            : 
-      87                 :          0 :         console2.log("CREATE2 Proxy Predict Bytecode:");
-      88                 :            :         // Copy this into init_code.txt
-      89                 :          0 :         console2.logBytes(abi.encodePacked(type(ERC1967Proxy).creationCode, abi.encode(fastlaneImplementation,encodedPostProxyDeployCall)));
-      90                 :            : 
-      91                 :            : 
-      92                 :          0 :         console2.log("Deployed Proxy @:");
-      93                 :          0 :         address deployedProxyAddress = address(proxy);
-      94                 :          0 :         console2.log(deployedProxyAddress);
-      95                 :          0 :         console2.log("------------------------------------");
-      96                 :            : 
-      97                 :          0 :         address expectedProxyAddress = 0xfa571A11e01d7759B816B41B5018432B2D202043;
-      98         [ #  # ]:          0 :         require(deployedProxyAddress == expectedProxyAddress, "Wrong Addresses");
-      99                 :            : 
-     100                 :            :         // (bool successInitializeProxy,) = address(proxy).call(abi.encodeWithSignature("initialize()"));
-     101                 :            : 
-     102                 :            :         // Setup the FastlaneAuction through the proxy.
-     103                 :          0 :         address STARTER_ROLE = msg.sender; // Change me
-     104                 :          0 :         (bool successInitialSetupAuction, bytes memory returnSetupData) = deployedProxyAddress.call(abi.encodeWithSignature("initialSetupAuction(address,address,address)", initial_bid_token, ops, STARTER_ROLE));
-     105                 :            :         
-     106                 :          0 :         console2.log("initialSetupAuction call:");
-     107                 :          0 :         console2.log(successInitialSetupAuction);
-     108                 :          0 :         console2.log(string(returnSetupData));
-     109                 :          0 :         console2.log("------------------------------------");
-     110                 :          0 :         console2.log(fastlaneImplementation.code.length);
-     111                 :          0 :         console2.log("------------------------------------");
-     112                 :            : 
-     113         [ #  # ]:          0 :         require(successInitialSetupAuction,"Proxy calls fail");
-     114                 :            :     }
-     115                 :            : 
-     116                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/index-sort-b.html b/report/script/index-sort-b.html deleted file mode 100644 index 62d4e27..0000000 --- a/report/script/index-sort-b.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - script - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - scriptHitTotalCoverage
Test:lcov.infoLines:0160.0 %
Date:2023-09-07 01:01:29Functions:020.0 %
Branches:040.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
EOADeploy.s.sol -
0.0%
-
0.0 %0 / 160.0 %0 / 20.0 %0 / 4
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/index-sort-f.html b/report/script/index-sort-f.html deleted file mode 100644 index 476d831..0000000 --- a/report/script/index-sort-f.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - script - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - scriptHitTotalCoverage
Test:lcov.infoLines:0160.0 %
Date:2023-09-07 01:01:29Functions:020.0 %
Branches:040.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
EOADeploy.s.sol -
0.0%
-
0.0 %0 / 160.0 %0 / 20.0 %0 / 4
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/index-sort-l.html b/report/script/index-sort-l.html deleted file mode 100644 index d32121f..0000000 --- a/report/script/index-sort-l.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - script - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - scriptHitTotalCoverage
Test:lcov.infoLines:0160.0 %
Date:2023-09-07 01:01:29Functions:020.0 %
Branches:040.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
EOADeploy.s.sol -
0.0%
-
0.0 %0 / 160.0 %0 / 20.0 %0 / 4
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/index.html b/report/script/index.html deleted file mode 100644 index 3b2b039..0000000 --- a/report/script/index.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - script - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - scriptHitTotalCoverage
Test:lcov.infoLines:0160.0 %
Date:2023-09-07 01:01:29Functions:020.0 %
Branches:040.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
EOADeploy.s.sol -
0.0%
-
0.0 %0 / 160.0 %0 / 20.0 %0 / 4
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/legacy-script/EOADeploy.s.sol.func-sort-c.html b/report/script/legacy-script/EOADeploy.s.sol.func-sort-c.html deleted file mode 100644 index 8fd19c4..0000000 --- a/report/script/legacy-script/EOADeploy.s.sol.func-sort-c.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - LCOV - lcov.info - script/legacy-script/EOADeploy.s.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script/legacy-script - EOADeploy.s.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0170.0 %
Date:2023-09-07 01:01:29Functions:020.0 %
Branches:040.0 %
-
- -
- - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
Deploy.getArgs0
Deploy.run0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/legacy-script/EOADeploy.s.sol.func.html b/report/script/legacy-script/EOADeploy.s.sol.func.html deleted file mode 100644 index 6fe55a4..0000000 --- a/report/script/legacy-script/EOADeploy.s.sol.func.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - LCOV - lcov.info - script/legacy-script/EOADeploy.s.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script/legacy-script - EOADeploy.s.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0170.0 %
Date:2023-09-07 01:01:29Functions:020.0 %
Branches:040.0 %
-
- -
- - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
Deploy.getArgs0
Deploy.run0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/legacy-script/EOADeploy.s.sol.gcov.html b/report/script/legacy-script/EOADeploy.s.sol.gcov.html deleted file mode 100644 index 8573582..0000000 --- a/report/script/legacy-script/EOADeploy.s.sol.gcov.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - LCOV - lcov.info - script/legacy-script/EOADeploy.s.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script/legacy-script - EOADeploy.s.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0170.0 %
Date:2023-09-07 01:01:29Functions:020.0 %
Branches:040.0 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : // SPDX-License-Identifier: AGPL-3.0-only
-       2                 :            : pragma solidity ^0.8.15;
-       3                 :            : 
-       4                 :            : import "forge-std/Test.sol";
-       5                 :            : import "forge-std/Script.sol";
-       6                 :            : 
-       7                 :            : import {FastLaneLegacyAuction} from "../../contracts/legacy/FastLaneLegacyAuction.sol";
-       8                 :            : 
-       9                 :            : contract Deploy is Script {
-      10                 :            : 
-      11                 :            : 
-      12                 :            :     address public fastlane;
-      13                 :            : 
-      14                 :            :     mapping(uint256 => address) public gelatoOpsAddresses;
-      15                 :            :     mapping(uint256 => address) public wrappedNativeAddresses;
-      16                 :            : 
-      17                 :            : 
-      18                 :            :     function getArgs() public view returns (address initial_bid_token, address ops) {
-      19                 :          0 :         ops = gelatoOpsAddresses[block.chainid];
-      20                 :          0 :         initial_bid_token = wrappedNativeAddresses[block.chainid];
-      21                 :            :     }
-      22                 :            : 
-      23                 :            :     function run() public {
-      24                 :            : 
-      25                 :          0 :         gelatoOpsAddresses[1] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F;
-      26                 :          0 :         gelatoOpsAddresses[137] = 0x527a819db1eb0e34426297b03bae11F2f8B3A19E;
-      27                 :          0 :         gelatoOpsAddresses[80001] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F;
-      28                 :          0 :         gelatoOpsAddresses[31337] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F;
-      29                 :            : 
-      30                 :          0 :         wrappedNativeAddresses[1] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
-      31                 :          0 :         wrappedNativeAddresses[137] = 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270;
-      32                 :          0 :         wrappedNativeAddresses[80001] = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889;
-      33                 :          0 :         wrappedNativeAddresses[31337] = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889;
-      34                 :            : 
-      35                 :            : 
-      36                 :          0 :         (address initial_bid_token, address ops) = getArgs();
-      37                 :            : 
-      38                 :            : 
-      39         [ #  # ]:          0 :         require(ops != address(0), "O(o)ps");
-      40         [ #  # ]:          0 :         require(initial_bid_token != address(0), "Wrapped");
-      41                 :            : 
-      42                 :            :         // Unusable until vm.remember: https://github.com/foundry-rs/foundry/pull/2299
-      43                 :            :         // uint256 deployerPrivateKey = vm.deriveKey(vm.envString("TESTNET_MNEMONIC"), 0);
-      44                 :            :         // vm.startBroadcast(vm.addr(deployerPrivateKey));
-      45                 :            : 
-      46                 :          0 :         vm.startBroadcast();
-      47                 :          0 :         fastlane = address(new FastLaneLegacyAuction(msg.sender));
-      48                 :            :         
-      49                 :          0 :         FastLaneLegacyAuction(fastlane).initialSetupAuction(initial_bid_token, ops, msg.sender);
-      50                 :            : 
-      51                 :          0 :         console2.log(fastlane);
-      52                 :            :     }
-      53                 :            : 
-      54                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/legacy-script/UUPSDeploy.s.sol.func-sort-c.html b/report/script/legacy-script/UUPSDeploy.s.sol.func-sort-c.html deleted file mode 100644 index 8d88400..0000000 --- a/report/script/legacy-script/UUPSDeploy.s.sol.func-sort-c.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - LCOV - lcov.info - script/legacy-script/UUPSDeploy.s.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script/legacy-script - UUPSDeploy.s.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0540.0 %
Date:2023-09-07 01:01:29Functions:020.0 %
Branches:080.0 %
-
- -
- - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
Deploy.getArgs0
Deploy.run0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/legacy-script/UUPSDeploy.s.sol.func.html b/report/script/legacy-script/UUPSDeploy.s.sol.func.html deleted file mode 100644 index 52c0f6e..0000000 --- a/report/script/legacy-script/UUPSDeploy.s.sol.func.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - LCOV - lcov.info - script/legacy-script/UUPSDeploy.s.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script/legacy-script - UUPSDeploy.s.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0540.0 %
Date:2023-09-07 01:01:29Functions:020.0 %
Branches:080.0 %
-
- -
- - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
Deploy.getArgs0
Deploy.run0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/legacy-script/UUPSDeploy.s.sol.gcov.html b/report/script/legacy-script/UUPSDeploy.s.sol.gcov.html deleted file mode 100644 index 2a89ad2..0000000 --- a/report/script/legacy-script/UUPSDeploy.s.sol.gcov.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - LCOV - lcov.info - script/legacy-script/UUPSDeploy.s.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script/legacy-script - UUPSDeploy.s.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0540.0 %
Date:2023-09-07 01:01:29Functions:020.0 %
Branches:080.0 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : // SPDX-License-Identifier: AGPL-3.0-only
-       2                 :            : pragma solidity 0.8.16;
-       3                 :            : 
-       4                 :            : import "forge-std/Test.sol";
-       5                 :            : import "forge-std/Script.sol";
-       6                 :            : 
-       7                 :            : import {FastLaneLegacyAuction} from "../../contracts/legacy/FastLaneLegacyAuction.sol";
-       8                 :            : import {ERC1967Proxy} from "openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol";
-       9                 :            : 
-      10                 :            : contract Deploy is Script {
-      11                 :            : 
-      12                 :            : 
-      13                 :            :     address public fastlaneImplementation;
-      14                 :            : 
-      15                 :            :     mapping(uint256 => address) public gelatoOpsAddresses;
-      16                 :            :     mapping(uint256 => address) public wrappedNativeAddresses;
-      17                 :            : 
-      18                 :            : 
-      19                 :            :     function getArgs() public view returns (address initial_bid_token, address ops) {
-      20                 :          0 :         ops = gelatoOpsAddresses[block.chainid];
-      21                 :          0 :         initial_bid_token = wrappedNativeAddresses[block.chainid];
-      22                 :            :     }
-      23                 :            : 
-      24                 :            :     function run() public {
-      25                 :            : 
-      26                 :          0 :         gelatoOpsAddresses[1] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F;
-      27                 :          0 :         gelatoOpsAddresses[137] = 0x527a819db1eb0e34426297b03bae11F2f8B3A19E;
-      28                 :          0 :         gelatoOpsAddresses[80001] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F;
-      29                 :          0 :         gelatoOpsAddresses[31337] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F;
-      30                 :            : 
-      31                 :          0 :         wrappedNativeAddresses[1] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
-      32                 :          0 :         wrappedNativeAddresses[137] = 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270;
-      33                 :          0 :         wrappedNativeAddresses[80001] = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889;
-      34                 :          0 :         wrappedNativeAddresses[31337] = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889;
-      35                 :            : 
-      36                 :            : 
-      37                 :          0 :         (address initial_bid_token, address ops) = getArgs();
-      38                 :            : 
-      39                 :            : 
-      40         [ #  # ]:          0 :         require(ops != address(0), "O(o)ps");
-      41         [ #  # ]:          0 :         require(initial_bid_token != address(0), "Wrapped");
-      42                 :            : 
-      43                 :          0 :         vm.startBroadcast();
-      44                 :            : 
-      45                 :          0 :         bytes32 proxySaltStr = 0xb225d27dc65c353234f5c8ec7c01d2a08967b60d774b801949184d7dfe8a1b9f;
-      46                 :          0 :         bytes32 implementationSaltStr = 0x2141af04bf09baab736a447148a230ae150f8f6fc929d6c6f2ccc364f364fb5a; // 0x111be7a544ba60d162f5d75ea6bda7254d650d8b
-      47                 :            : 
-      48                 :          0 :         address foundryFactory = 0x4e59b44847b379578588920cA78FbF26c0B4956C;
-      49                 :            : 
-      50                 :          0 :         address eoa = msg.sender;
-      51                 :            : 
-      52                 :            : 
-      53                 :          0 :         console2.log("CREATE2 Implementation Predict Bytecode:");
-      54                 :            :         // Copy this into init_code_implementation.txt
-      55                 :          0 :         console2.logBytes(abi.encodePacked(type(FastLaneLegacyAuction).creationCode, abi.encode(eoa)));
-      56                 :            : 
-      57                 :            : 
-      58                 :          0 :         FastLaneLegacyAuction FLAImplementation = new FastLaneLegacyAuction{salt: implementationSaltStr}(eoa); // 0x111be7a544ba60d162f5d75ea6bda7254d650d8b
-      59                 :          0 :         fastlaneImplementation = address(FLAImplementation); 
-      60                 :            : 
-      61                 :          0 :         console2.log("Implementation Deployed at:");
-      62                 :          0 :         console2.log(fastlaneImplementation);
-      63                 :          0 :         console2.log(fastlaneImplementation.code.length);
-      64                 :          0 :         console2.log("------------------------------------");
-      65                 :            : 
-      66                 :          0 :         console2.log("Current Sender:");
-      67                 :          0 :         console2.log(msg.sender);
-      68                 :          0 :         console2.log("------------------------------------");
-      69                 :            : 
-      70                 :            :         // Call that will be made after deploy of Proxy
-      71                 :            :         // will transfer ownership to `eoa` after receiving it from `foundryFactory`
-      72                 :          0 :         bytes memory encodedPostProxyDeployCall = abi.encodeWithSignature("initialize(address)", eoa);
-      73                 :            : 
-      74                 :          0 :         console2.log("encodedPostProxyDeployCall Bytecode:");
-      75                 :          0 :         console2.logBytes(encodedPostProxyDeployCall);
-      76                 :            : 
-      77                 :            : 
-      78                 :            : 
-      79                 :          0 :         console2.log("------------------------------------");
-      80                 :          0 :         ERC1967Proxy proxy = new ERC1967Proxy{salt: proxySaltStr}(fastlaneImplementation, encodedPostProxyDeployCall); 
-      81                 :            : 
-      82                 :            : 
-      83                 :          0 :         console2.log("Proxy Bytecode:");
-      84                 :          0 :         console2.logBytes(address(proxy).code);
-      85                 :          0 :         console2.log("------------------------------------");
-      86                 :            : 
-      87                 :          0 :         console2.log("CREATE2 Proxy Predict Bytecode:");
-      88                 :            :         // Copy this into init_code.txt
-      89                 :          0 :         console2.logBytes(abi.encodePacked(type(ERC1967Proxy).creationCode, abi.encode(fastlaneImplementation,encodedPostProxyDeployCall)));
-      90                 :            : 
-      91                 :            : 
-      92                 :          0 :         console2.log("Deployed Proxy @:");
-      93                 :          0 :         address deployedProxyAddress = address(proxy);
-      94                 :          0 :         console2.log(deployedProxyAddress);
-      95                 :          0 :         console2.log("------------------------------------");
-      96                 :            : 
-      97                 :          0 :         address expectedProxyAddress = 0xfa571A11e01d7759B816B41B5018432B2D202043;
-      98         [ #  # ]:          0 :         require(deployedProxyAddress == expectedProxyAddress, "Wrong Addresses");
-      99                 :            : 
-     100                 :            :         // (bool successInitializeProxy,) = address(proxy).call(abi.encodeWithSignature("initialize()"));
-     101                 :            : 
-     102                 :            :         // Setup the FastlaneAuction through the proxy.
-     103                 :          0 :         address STARTER_ROLE = msg.sender; // Change me
-     104                 :          0 :         (bool successInitialSetupAuction, bytes memory returnSetupData) = deployedProxyAddress.call(abi.encodeWithSignature("initialSetupAuction(address,address,address)", initial_bid_token, ops, STARTER_ROLE));
-     105                 :            :         
-     106                 :          0 :         console2.log("initialSetupAuction call:");
-     107                 :          0 :         console2.log(successInitialSetupAuction);
-     108                 :          0 :         console2.log(string(returnSetupData));
-     109                 :          0 :         console2.log("------------------------------------");
-     110                 :          0 :         console2.log(fastlaneImplementation.code.length);
-     111                 :          0 :         console2.log("------------------------------------");
-     112                 :            : 
-     113         [ #  # ]:          0 :         require(successInitialSetupAuction,"Proxy calls fail");
-     114                 :            :     }
-     115                 :            : 
-     116                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/legacy-script/index-sort-b.html b/report/script/legacy-script/index-sort-b.html deleted file mode 100644 index 64455aa..0000000 --- a/report/script/legacy-script/index-sort-b.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - LCOV - lcov.info - script/legacy-script - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script/legacy-scriptHitTotalCoverage
Test:lcov.infoLines:0710.0 %
Date:2023-09-07 01:01:29Functions:040.0 %
Branches:0120.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
EOADeploy.s.sol -
0.0%
-
0.0 %0 / 170.0 %0 / 20.0 %0 / 4
UUPSDeploy.s.sol -
0.0%
-
0.0 %0 / 540.0 %0 / 20.0 %0 / 8
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/legacy-script/index-sort-f.html b/report/script/legacy-script/index-sort-f.html deleted file mode 100644 index a024aa8..0000000 --- a/report/script/legacy-script/index-sort-f.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - LCOV - lcov.info - script/legacy-script - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script/legacy-scriptHitTotalCoverage
Test:lcov.infoLines:0710.0 %
Date:2023-09-07 01:01:29Functions:040.0 %
Branches:0120.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
EOADeploy.s.sol -
0.0%
-
0.0 %0 / 170.0 %0 / 20.0 %0 / 4
UUPSDeploy.s.sol -
0.0%
-
0.0 %0 / 540.0 %0 / 20.0 %0 / 8
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/legacy-script/index-sort-l.html b/report/script/legacy-script/index-sort-l.html deleted file mode 100644 index 37bfb13..0000000 --- a/report/script/legacy-script/index-sort-l.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - LCOV - lcov.info - script/legacy-script - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script/legacy-scriptHitTotalCoverage
Test:lcov.infoLines:0710.0 %
Date:2023-09-07 01:01:29Functions:040.0 %
Branches:0120.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
EOADeploy.s.sol -
0.0%
-
0.0 %0 / 170.0 %0 / 20.0 %0 / 4
UUPSDeploy.s.sol -
0.0%
-
0.0 %0 / 540.0 %0 / 20.0 %0 / 8
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/script/legacy-script/index.html b/report/script/legacy-script/index.html deleted file mode 100644 index 16724ae..0000000 --- a/report/script/legacy-script/index.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - LCOV - lcov.info - script/legacy-script - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - script/legacy-scriptHitTotalCoverage
Test:lcov.infoLines:0710.0 %
Date:2023-09-07 01:01:29Functions:040.0 %
Branches:0120.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
EOADeploy.s.sol -
0.0%
-
0.0 %0 / 170.0 %0 / 20.0 %0 / 4
UUPSDeploy.s.sol -
0.0%
-
0.0 %0 / 540.0 %0 / 20.0 %0 / 8
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/snow.png b/report/snow.png deleted file mode 100644 index 2cdae107fceec6e7f02ac7acb4a34a82a540caa5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^MM!lvI6;R0X`wF|Ns97GD8ntt^-nBo-U3d c6}OTTfNUlP#;5A{K>8RwUHx3vIVCg!071?oo&W#< diff --git a/report/test/PFLAuction.t.sol.func-sort-c.html b/report/test/PFLAuction.t.sol.func-sort-c.html deleted file mode 100644 index b323c91..0000000 --- a/report/test/PFLAuction.t.sol.func-sort-c.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - LCOV - lcov.info - test/PFLAuction.t.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test - PFLAuction.t.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0270.0 %
Date:2022-11-15 17:07:48Functions:030.0 %
Branches:020.0 %
-
- -
- - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
PFLHelper._calculateCuts0
PFLHelper.setUpBiddersSearchersWallets0
PFLHelper.setUpMaticAndFastlane0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/PFLAuction.t.sol.func.html b/report/test/PFLAuction.t.sol.func.html deleted file mode 100644 index 061ec25..0000000 --- a/report/test/PFLAuction.t.sol.func.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - LCOV - lcov.info - test/PFLAuction.t.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test - PFLAuction.t.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0270.0 %
Date:2022-11-15 17:07:48Functions:030.0 %
Branches:020.0 %
-
- -
- - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
PFLHelper._calculateCuts0
PFLHelper.setUpBiddersSearchersWallets0
PFLHelper.setUpMaticAndFastlane0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/PFLAuction.t.sol.gcov.html b/report/test/PFLAuction.t.sol.gcov.html deleted file mode 100644 index 765b644..0000000 --- a/report/test/PFLAuction.t.sol.gcov.html +++ /dev/null @@ -1,1341 +0,0 @@ - - - - - - - LCOV - lcov.info - test/PFLAuction.t.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test - PFLAuction.t.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0270.0 %
Date:2022-11-15 17:07:48Functions:030.0 %
Branches:020.0 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : // SPDX-License-Identifier: UNLICENSED
-       2                 :            : pragma solidity ^0.8.15;
-       3                 :            : 
-       4                 :            : import "forge-std/Test.sol";
-       5                 :            : import "forge-std/console.sol";
-       6                 :            : import "forge-std/console2.sol";
-       7                 :            : 
-       8                 :            : import "contracts/legacy/FastLaneLegacyAuction.sol";
-       9                 :            : 
-      10                 :            : import "openzeppelin-contracts/contracts/utils/Strings.sol";
-      11                 :            : import "openzeppelin-contracts/contracts/utils/Address.sol";
-      12                 :            : import "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";
-      13                 :            : 
-      14                 :            : import "contracts/interfaces/IWMatic.sol";
-      15                 :            : 
-      16                 :            : import { MockERC20 } from "solmate/test/utils/mocks/MockERC20.sol";
-      17                 :            : 
-      18                 :            : 
-      19                 :            : // 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889 - Mumbai WMATIC
-      20                 :            : // 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270 - Polygon Mainnet WMATIC
-      21                 :            : 
-      22                 :            : abstract contract PFLHelper is Test, FastLaneEvents {
-      23                 :            : 
-      24                 :            :     using Address for address payable;
-      25                 :            :     FastLaneAuction public FLA;
-      26                 :            :     address constant MUMBAI_MATIC = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889;
-      27                 :            :     address constant OPS_ADDRESS = address(0xBEEF);
-      28                 :            :     WMATIC public wMatic;
-      29                 :            : 
-      30                 :            :     address public OWNER = 0xa401DCcD23DCdbc7296bDfb8A6c8d61106711CA6;
-      31                 :            : 
-      32                 :            :     address public BIDDER1 = 0xc71E2Df87C93bC3Ddba80e14406F3880E3D19D3e;
-      33                 :            : 
-      34                 :            :     address public BIDDER2 = 0x174237f20a0925d5eFEA401e5279181f0b7515EE;
-      35                 :            :     address public BIDDER3 = 0xFba52cDB2B36eCc27ac229b8feb2455B6aE3014b;
-      36                 :            :     address public BIDDER4 = 0xc4208Be0F01C8DBB57D0269887ccD5D269dEFf3B;
-      37                 :            : 
-      38                 :            :     address public VALIDATOR1 = 0x8149d8a0aCE8c058a679a1Fd4257aA1F1d2b9103;
-      39                 :            :     address public VALIDATOR2 = 0x161c3421Da27CD26E3c46Eb5711743343d17352d;
-      40                 :            :     address public VALIDATOR3 = 0x60d86bBFD061A359fd3B3E6Ef422b74B886f9a4a;
-      41                 :            :     address public VALIDATOR4 = 0x68F248c6B7820B191E4ed18c3d618ba7aC527C99;
-      42                 :            : 
-      43                 :            :     address public OPPORTUNITY1 = 0x8af6F6CA42171fc823619AC33a9A6C1892CA980B;
-      44                 :            :     address public OPPORTUNITY2 = 0x6eD132ea309B432FD49C9e70bc4F8Da429022F77;
-      45                 :            :     address public OPPORTUNITY3 = 0x8fcB7fb5e84847029Ba3e055BE46b86a4693AE40;
-      46                 :            :     address public OPPORTUNITY4 = 0x29D59575e85282c05112BEEC53fFadE66d3c7CD1;
-      47                 :            : 
-      48                 :            :     address public BROKE_BIDDER = 0xD057089743dc1461b1099Dee7A8CB848E361f6d9;
-      49                 :            :     address public BROKE_SEARCHER = 0xD057089743dc1461b1099Dee7A8CB848E361f6d9;
-      50                 :            : 
-      51                 :            :     address public SEARCHER_ADDRESS1 =  0x14BA06E061ada0443dbE5c7617A529Dd791c3146;
-      52                 :            :     address public SEARCHER_ADDRESS2 =  0x428a87F9c0ed1Bb9cdCE42f606e030ba40a525f3;
-      53                 :            :     address public SEARCHER_ADDRESS3 =  0x791e001586B75B8880bC6D02f2Ee19D42ec23E18;
-      54                 :            :     address public SEARCHER_ADDRESS4 =  0x4BF8fC74846da2dc54cCfd1f4fFac595939399e4;
-      55                 :            : 
-      56                 :            : 
-      57                 :            :     address[] public BIDDERS = [BIDDER1, BIDDER2, BIDDER3, BIDDER4];
-      58                 :            : 
-      59                 :            :     address[] public SEARCHERS = [SEARCHER_ADDRESS1, SEARCHER_ADDRESS2, SEARCHER_ADDRESS3, SEARCHER_ADDRESS4];
-      60                 :            : 
-      61                 :            :     address[] public VALIDATORS = [
-      62                 :            :         VALIDATOR1,
-      63                 :            :         VALIDATOR2,
-      64                 :            :         VALIDATOR3,
-      65                 :            :         VALIDATOR4
-      66                 :            :     ];
-      67                 :            :     address[] public OPPORTUNITIES = [
-      68                 :            :         OPPORTUNITY1,
-      69                 :            :         OPPORTUNITY2,
-      70                 :            :         OPPORTUNITY3,
-      71                 :            :         OPPORTUNITY4
-      72                 :            :     ];
-      73                 :            : 
-      74                 :            :     constructor() {}
-      75                 :            : 
-      76                 :            :     // function logReads(address addr) public {
-      77                 :            :     //     (bytes32[] memory reads, bytes32[] memory writes) = vm.accesses(
-      78                 :            :     //         address(addr)
-      79                 :            :     //     );
-      80                 :            :     //     for (uint256 i; i < reads.length; i++) {
-      81                 :            :     //         emit log_uint(uint256(reads[i]));
-      82                 :            :     //     }
-      83                 :            :     // }
-      84                 :            : 
-      85                 :            :     function _calculateCuts(uint256 amount,uint256 fee) internal pure returns (uint256 vCut, uint256 flCut) {
-      86                 :          0 :         vCut = (amount * (1000000 - fee)) / 1000000;
-      87                 :          0 :         flCut = amount - vCut;
-      88                 :            :     }
-      89                 :            : 
-      90                 :            :     function setUpMaticAndFastlane(bool noAuction) public returns (address) {
-      91                 :            :         // Obtained from
-      92                 :            :         // emit log_bytes(bytecode); of vm.getCode("Wmatic.sol")
-      93                 :          0 :         bytes memory bytecode = hex"60c0604052600d60808190527f57726170706564204d617469630000000000000000000000000000000000000060a090815261003e91600091906100a3565b506040805180820190915260068082527f574d4154494300000000000000000000000000000000000000000000000000006020909201918252610083916001916100a3565b506002805460ff1916601217905534801561009d57600080fd5b5061013e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100e457805160ff1916838001178555610111565b82800160010185558215610111579182015b828111156101115782518255916020019190600101906100f6565b5061011d929150610121565b5090565b61013b91905b8082111561011d5760008155600101610127565b90565b6106568061014d6000396000f3006080604052600436106100925760003560e01c63ffffffff16806306fdde031461009c578063095ea7b31461012657806318160ddd1461015e57806323b872dd146101855780632e1a7d4d146101af578063313ce567146101c757806370a08231146101f257806395d89b4114610213578063a9059cbb14610228578063d0e30db014610092578063dd62ed3e1461024c575b61009a610273565b005b3480156100a857600080fd5b506100b16102c2565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100eb5781810151838201526020016100d3565b50505050905090810190601f1680156101185780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561013257600080fd5b5061014a600160a060020a0360043516602435610350565b604080519115158252519081900360200190f35b34801561016a57600080fd5b506101736103b6565b60408051918252519081900360200190f35b34801561019157600080fd5b5061014a600160a060020a03600435811690602435166044356103bb565b3480156101bb57600080fd5b5061009a6004356104ef565b3480156101d357600080fd5b506101dc610584565b6040805160ff9092168252519081900360200190f35b3480156101fe57600080fd5b50610173600160a060020a036004351661058d565b34801561021f57600080fd5b506100b161059f565b34801561023457600080fd5b5061014a600160a060020a03600435166024356105f9565b34801561025857600080fd5b50610173600160a060020a036004358116906024351661060d565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103485780601f1061031d57610100808354040283529160200191610348565b820191906000526020600020905b81548152906001019060200180831161032b57829003601f168201915b505050505081565b336000818152600460209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b303190565b600160a060020a0383166000908152600360205260408120548211156103e057600080fd5b600160a060020a038416331480159061041e5750600160a060020a038416600090815260046020908152604080832033845290915290205460001914155b1561047e57600160a060020a038416600090815260046020908152604080832033845290915290205482111561045357600080fd5b600160a060020a03841660009081526004602090815260408083203384529091529020805483900390555b600160a060020a03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561050b57600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f1935050505015801561054a573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103485780601f1061031d57610100808354040283529160200191610348565b60006106063384846103bb565b9392505050565b6004602090815260009283526040808420909152908252902054815600a165627a7a723058206118e6580df80a8af43aaa932ff4545b6c57ca46d1b8c249807304c1f63050280029";
-      94                 :            :         
-      95                 :          0 :         address maticAddress;
-      96                 :            :         assembly {
-      97                 :          0 :             maticAddress := create(0, add(bytecode, 0x20), mload(bytecode))
-      98                 :            :         }
-      99                 :          0 :         vm.etch(MUMBAI_MATIC, maticAddress.code);
-     100                 :            : 
-     101                 :          0 :         vm.prank(OWNER);
-     102                 :            : 
-     103         [ #  # ]:          0 :         if (noAuction == false) {
-     104                 :          0 :             FLA = new FastLaneAuction(OWNER);
-     105                 :            : 
-     106                 :          0 :             vm.prank(OWNER);
-     107                 :          0 :             FLA.initialSetupAuction(MUMBAI_MATIC, OPS_ADDRESS, OWNER);
-     108                 :          0 :             return address(FLA);
-     109                 :            :         }
-     110                 :            :         
-     111                 :          0 :         return address(0);
-     112                 :            :     }
-     113                 :            : 
-     114                 :            :     function setUpBiddersSearchersWallets() public {
-     115                 :          0 :                 wMatic = WMATIC(MUMBAI_MATIC);
-     116                 :            : 
-     117                 :          0 :         for (uint256 i = 0; i < BIDDERS.length; i++) {
-     118                 :          0 :             address currentBidder = BIDDERS[i];
-     119                 :          0 :             address currentSearcher = SEARCHERS[i];
-     120                 :          0 :             vm.label(currentBidder,string.concat("BIDDER",Strings.toString(i+1)));
-     121                 :          0 :             vm.label(currentSearcher,string.concat("SEARCHER",Strings.toString(i+1)));
-     122                 :          0 :             uint256 soonWMaticBidder = (10 ether * (i + 1));
-     123                 :          0 :             uint256 soonWMaticSearcher = (33 ether * (i + 1));
-     124                 :            : 
-     125                 :          0 :             vm.deal(currentBidder, soonWMaticBidder + 1);
-     126                 :          0 :             vm.deal(currentSearcher, soonWMaticSearcher + 1);
-     127                 :            : 
-     128                 :          0 :             vm.prank(currentBidder);
-     129                 :          0 :             wMatic.deposit{value: soonWMaticBidder}();
-     130                 :          0 :             vm.prank(currentSearcher);
-     131                 :          0 :             wMatic.deposit{value: soonWMaticSearcher}();
-     132                 :            :             // console2.log(
-     133                 :            :             //     "[amount Bidder] :",
-     134                 :            :             //     i+1,
-     135                 :            :             //     " -> ",
-     136                 :            :             //     wMatic.balanceOf(currentBidder)
-     137                 :            :             // );
-     138                 :            :             // console2.log(
-     139                 :            :             //     "[amount Searcher] :",
-     140                 :            :             //     i+1,
-     141                 :            :             //     " -> ",
-     142                 :            :             //     wMatic.balanceOf(currentSearcher)
-     143                 :            :             // );
-     144                 :            :         }
-     145                 :            :     }
-     146                 :            : }
-     147                 :            : contract PFLAuctionTest is PFLHelper {
-     148                 :            : 
-     149                 :            : 
-     150                 :            : 
-     151                 :            :     function setUp() public {
-     152                 :            :   
-     153                 :            : 
-     154                 :            :         setUpMaticAndFastlane(false);
-     155                 :            :         setUpBiddersSearchersWallets();
-     156                 :            :         // address owner = FLA.owner();
-     157                 :            :         // console2.log("FLA OWNER:", owner);
-     158                 :            : 
-     159                 :            : 
-     160                 :            :         // console2.log("FLA deployed at:", address(FLA));
-     161                 :            :         // console2.log("WMATIC deployed at:", MUMBAI_MATIC);
-     162                 :            : 
-     163                 :            :         
-     164                 :            :     }
-     165                 :            : 
-     166                 :            :     function testStartStopNoBidAuction() public {
-     167                 :            :         console2.log("Sender", msg.sender);
-     168                 :            :         vm.startPrank(OWNER);
-     169                 :            :         // vm.record();
-     170                 :            : 
-     171                 :            :         FLA.startAuction();
-     172                 :            :         FLA.endAuction();
-     173                 :            : 
-     174                 :            :         assertTrue(FLA.auction_number() == 2);
-     175                 :            :         assertEq(FLA.getActivePrivilegesAuctionNumber(), 1);
-     176                 :            : 
-     177                 :            :         address starter = vm.addr(420);
-     178                 :            :         vm.expectEmit(true, false, false, false);
-     179                 :            :         emit AuctionStarterSet(starter);
-     180                 :            :         FLA.setStarter(starter);
-     181                 :            : 
-     182                 :            :         vm.stopPrank();
-     183                 :            :         vm.expectRevert(FastLaneEvents.PermissionNotOwnerNorStarter.selector);
-     184                 :            :         FLA.startAuction();
-     185                 :            : 
-     186                 :            :         vm.startPrank(starter);
-     187                 :            : 
-     188                 :            :         FLA.startAuction();
-     189                 :            :         FLA.endAuction();
-     190                 :            : 
-     191                 :            :         assertTrue(FLA.auction_number() == 3);
-     192                 :            :         assertEq(FLA.getActivePrivilegesAuctionNumber(), 2);
-     193                 :            :     }
-     194                 :            : 
-     195                 :            :     function testStartProcessStopMultipleEmptyAuctions() public {
-     196                 :            :         vm.startPrank(OWNER);
-     197                 :            :         // vm.record();
-     198                 :            : 
-     199                 :            :         vm.expectEmit(true, true, false, false);
-     200                 :            :         emit OpportunityAddressEnabled(OPPORTUNITY1,1);
-     201                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     202                 :            : 
-     203                 :            :         vm.expectEmit(true, true, false, false);
-     204                 :            :         emit ValidatorAddressEnabled(VALIDATOR1, 1);
-     205                 :            :         FLA.enableValidatorAddress(VALIDATOR1);
-     206                 :            : 
-     207                 :            :         FLA.startAuction();
-     208                 :            :         // Now live, delay to next
-     209                 :            :         vm.expectEmit(true, true, false, false);
-     210                 :            :         emit OpportunityAddressEnabled(OPPORTUNITY2,2);
-     211                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY2);
-     212                 :            :         
-     213                 :            :         vm.expectEmit(true, true, false, false);
-     214                 :            :         emit ValidatorAddressEnabled(VALIDATOR2, 2);
-     215                 :            :         FLA.enableValidatorAddress(VALIDATOR2);
-     216                 :            : 
-     217                 :            :         FLA.endAuction();
-     218                 :            : 
-     219                 :            :         FLA.startAuction();
-     220                 :            :         FLA.endAuction();
-     221                 :            : 
-     222                 :            :         assertTrue(FLA.auction_number() == 3);
-     223                 :            :     }
-     224                 :            :     function testValidatorCheckpoint() public {
-     225                 :            :         vm.startPrank(OWNER);
-     226                 :            : 
-     227                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     228                 :            :         FLA.enableValidatorAddress(VALIDATOR1);
-     229                 :            : 
-     230                 :            :         ValidatorBalanceCheckpoint memory vCheck = FLA.getCheckpoint(VALIDATOR1);
-     231                 :            : 
-     232                 :            :         assertTrue(vCheck.pendingBalanceAtlastBid == 0);
-     233                 :            :         assertTrue(vCheck.outstandingBalance == 0);
-     234                 :            :         assertTrue(vCheck.lastWithdrawnAuction == 0);
-     235                 :            :         assertTrue(vCheck.lastBidReceivedAuction == 0);
-     236                 :            : 
-     237                 :            :         Status memory st = FLA.getStatus(OPPORTUNITY1);
-     238                 :            :         assertTrue(st.activeAtAuctionRound == 1);
-     239                 :            :         assertTrue(st.inactiveAtAuctionRound == FLA.MAX_AUCTION_VALUE());
-     240                 :            :         assertTrue(st.kind == statusType.OPPORTUNITY);
-     241                 :            : 
-     242                 :            :         FLA.startAuction();
-     243                 :            :         FLA.enableValidatorAddress(VALIDATOR2);
-     244                 :            :         Status memory stVal2 = FLA.getStatus(VALIDATOR2);
-     245                 :            :         
-     246                 :            :         assertTrue(stVal2.activeAtAuctionRound == 2);
-     247                 :            :         assertTrue(stVal2.inactiveAtAuctionRound == FLA.MAX_AUCTION_VALUE());
-     248                 :            :         assertTrue(stVal2.kind == statusType.VALIDATOR);
-     249                 :            : 
-     250                 :            :     }
-     251                 :            : 
-     252                 :            :     function testStartProcessSingleOutBidAuction() public {
-     253                 :            :         vm.startPrank(OWNER);
-     254                 :            : 
-     255                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     256                 :            :         FLA.enableValidatorAddress(VALIDATOR1);
-     257                 :            : 
-     258                 :            :         FLA.startAuction();
-     259                 :            : 
-     260                 :            :         vm.stopPrank();
-     261                 :            :         vm.startPrank(BIDDER1);
-     262                 :            : 
-     263                 :            :         // Bid { validatorAddress - opportunityAddress - searcherContractAddress - searcherPayableAddress - bidAmount}
-     264                 :            :         Bid memory auctionWrongSearchableBid = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, BIDDER2, 11*10**18);
-     265                 :            :         Bid memory auctionWrongOpportunityBid = Bid(VALIDATOR1, OPPORTUNITY2, BIDDER1, BIDDER1, 11*10**18);
-     266                 :            :         Bid memory auctionWrongValidatorBid = Bid(VALIDATOR2, OPPORTUNITY1, BIDDER1, BIDDER1, 11*10**18);
-     267                 :            :         Bid memory auctionWrongIncrementBid = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, BIDDER1, 8*10**18);
-     268                 :            : 
-     269                 :            :         Bid memory auctionRightMinimumBidWithSearcher = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment());
-     270                 :            :         
-     271                 :            :         Bid memory auctionWrongDoubleSelfBidWithSearcherTooLow = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment() + 1);
-     272                 :            :         Bid memory auctionWrongDoubleSelfBidWithSearcherEnough = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment() * 2);
-     273                 :            : 
-     274                 :            :         Bid memory auctionWrongBrokeBidderBidTooLow = Bid(VALIDATOR1, OPPORTUNITY1, BROKE_BIDDER, BROKE_BIDDER, 8*10**18);
-     275                 :            :         Bid memory auctionWrongBrokeBidderBidEnough = Bid(VALIDATOR1, OPPORTUNITY1, BROKE_BIDDER, BROKE_BIDDER, FLA.bid_increment() * 2);
-     276                 :            : 
-     277                 :            :         // Bid memory auctionWrongBrokeSearcherBid = Bid(VALIDATOR1, OPPORTUNITY1, BROKE_BIDDER, BROKE_SEARCHER, 8*10**18);
-     278                 :            : 
-     279                 :            :         Bid memory auctionRightOutbidsTopBidderFirstPair = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER2, SEARCHER_ADDRESS2, FLA.bid_increment() * 2);
-     280                 :            :        
-     281                 :            :         // Bid should be coming from EOA that's paying aka BIDDER1 from line 186.
-     282                 :            :         vm.expectRevert(FastLaneEvents.PermissionOnlyFromPayorEoa.selector);
-     283                 :            :         FLA.submitBid(auctionWrongSearchableBid);
-     284                 :            :         
-     285                 :            :         // Attempts to bid from OPPORTUNITY2 which has not been enabled yet
-     286                 :            :         vm.expectRevert(FastLaneEvents.PermissionMustBeValidator.selector);
-     287                 :            :         FLA.submitBid(auctionWrongValidatorBid);
-     288                 :            :         
-     289                 :            :         vm.expectRevert(FastLaneEvents.PermissionInvalidOpportunityAddress.selector);
-     290                 :            :         FLA.submitBid(auctionWrongOpportunityBid);
-     291                 :            : 
-     292                 :            :         vm.expectRevert(FastLaneEvents.InequalityTooLow.selector);
-     293                 :            :         FLA.submitBid(auctionWrongIncrementBid);
-     294                 :            : 
-     295                 :            :         vm.stopPrank(); // Not BIDDER1 anymore
-     296                 :            :         
-     297                 :            :         vm.startPrank(auctionRightMinimumBidWithSearcher.searcherPayableAddress);
-     298                 :            : 
-     299                 :            :         // Missing approval
-     300                 :            :         vm.expectRevert(bytes("TRANSFER_FROM_FAILED"));
-     301                 :            :         FLA.submitBid(auctionRightMinimumBidWithSearcher);
-     302                 :            : 
-     303                 :            :         // Approve as the Payable
-     304                 :            :         wMatic.approve(address(FLA), 2**256 - 1);
-     305                 :            : 
-     306                 :            :         // First correct bid 
-     307                 :            :         uint balanceBefore = wMatic.balanceOf(auctionRightMinimumBidWithSearcher.searcherPayableAddress);
-     308                 :            : 
-     309                 :            :         vm.expectEmit(true, true, true, true, address(FLA));
-     310                 :            :         emit BidAdded(BIDDER1, VALIDATOR1, OPPORTUNITY1, FLA.bid_increment(), 1);
-     311                 :            :         // Check event
-     312                 :            :         FLA.submitBid(auctionRightMinimumBidWithSearcher);
-     313                 :            : 
-     314                 :            :         // Check Top Bid
-     315                 :            :         {
-     316                 :            :             (uint256 topBidAmount, uint128 currentAuctionNumber) = FLA.findLiveAuctionTopBid(VALIDATOR1, OPPORTUNITY1);
-     317                 :            :             assertEq(topBidAmount, FLA.bid_increment());
-     318                 :            :             assertEq(currentAuctionNumber, 1);
-     319                 :            :         }
-     320                 :            : 
-     321                 :            :         // Check checkpoint and cuts
-     322                 :            :         ValidatorBalanceCheckpoint memory vCheck = FLA.getCheckpoint(VALIDATOR1);
-     323                 :            : 
-     324                 :            :         (uint256 vCut,uint256 flCut) = _calculateCuts(auctionRightMinimumBidWithSearcher.bidAmount, FLA.fast_lane_fee());
-     325                 :            :         assertTrue(vCheck.pendingBalanceAtlastBid == vCut);
-     326                 :            :         assertTrue(vCheck.outstandingBalance == 0);
-     327                 :            :         assertTrue(vCheck.lastWithdrawnAuction == 0);
-     328                 :            :         assertTrue(vCheck.lastBidReceivedAuction == 1);
-     329                 :            : 
-     330                 :            :         assertTrue(FLA.outstandingFLBalance() == flCut);
-     331                 :            : 
-     332                 :            :         // Check balances
-     333                 :            :         assertEq(wMatic.balanceOf(auctionRightMinimumBidWithSearcher.searcherPayableAddress), balanceBefore - auctionRightMinimumBidWithSearcher.bidAmount);
-     334                 :            :         assertEq(wMatic.balanceOf(address(FLA)), auctionRightMinimumBidWithSearcher.bidAmount);
-     335                 :            : 
-     336                 :            :         vm.expectRevert(FastLaneEvents.InequalityTooLow.selector);
-     337                 :            :         FLA.submitBid(auctionWrongDoubleSelfBidWithSearcherTooLow);
-     338                 :            : 
-     339                 :            :         vm.expectRevert(FastLaneEvents.InequalityAlreadyTopBidder.selector);
-     340                 :            :         FLA.submitBid(auctionWrongDoubleSelfBidWithSearcherEnough);
-     341                 :            :   
-     342                 :            : 
-     343                 :            :         vm.stopPrank();
-     344                 :            : 
-     345                 :            :         // There was a bid valid before of FLA.bid_increment().
-     346                 :            :         // First we don't top it, then we do, but with an empty bank account. Both reverting.
-     347                 :            :         vm.startPrank(auctionWrongBrokeBidderBidTooLow.searcherPayableAddress);
-     348                 :            :         wMatic.approve(address(FLA), 2**256 - 1);
-     349                 :            :         vm.expectRevert(FastLaneEvents.InequalityTooLow.selector);
-     350                 :            :         FLA.submitBid(auctionWrongBrokeBidderBidTooLow);
-     351                 :            :        
-     352                 :            :         vm.expectRevert(FastLaneEvents.InequalityNotEnoughFunds.selector);
-     353                 :            :         FLA.submitBid(auctionWrongBrokeBidderBidEnough);
-     354                 :            : 
-     355                 :            :         vm.stopPrank();
-     356                 :            : 
-     357                 :            :         // Beat previous bid from another searcher on same pair
-     358                 :            :         
-     359                 :            :         vm.startPrank(auctionRightOutbidsTopBidderFirstPair.searcherPayableAddress);
-     360                 :            : 
-     361                 :            :         // Approve as the Payable
-     362                 :            :         wMatic.approve(address(FLA), 2**256 - 1);
-     363                 :            : 
-     364                 :            : 
-     365                 :            :         uint balanceBeforeOfFirstBidder = wMatic.balanceOf(auctionRightMinimumBidWithSearcher.searcherPayableAddress);
-     366                 :            :         uint balanceBeforeOfUpcomingBidder = wMatic.balanceOf(auctionRightOutbidsTopBidderFirstPair.searcherPayableAddress);
-     367                 :            :         uint outstandingFLBalanceBeforeOutbidding = FLA.outstandingFLBalance();
-     368                 :            : 
-     369                 :            :         vm.expectEmit(true, true, true, true, address(FLA));
-     370                 :            :         emit BidAdded(BIDDER2, VALIDATOR1, OPPORTUNITY1, FLA.bid_increment() * 2, 1);
-     371                 :            :         FLA.submitBid(auctionRightOutbidsTopBidderFirstPair);
-     372                 :            : 
-     373                 :            :         // Check refund since we have an existing bid
-     374                 :            :         uint balanceAfterOfFirstBidder = wMatic.balanceOf(auctionRightMinimumBidWithSearcher.searcherPayableAddress);
-     375                 :            :         // Bidder1 is whole again
-     376                 :            :         assertTrue(balanceAfterOfFirstBidder == balanceBeforeOfFirstBidder + auctionRightMinimumBidWithSearcher.bidAmount);
-     377                 :            : 
-     378                 :            :         // Bidder2 balance was taken
-     379                 :            :         uint balanceAfterOfUpcomingBidder = wMatic.balanceOf(auctionRightOutbidsTopBidderFirstPair.searcherPayableAddress);
-     380                 :            :         assertTrue(balanceAfterOfUpcomingBidder == balanceBeforeOfUpcomingBidder - auctionRightOutbidsTopBidderFirstPair.bidAmount);
-     381                 :            : 
-     382                 :            :         // And into the contract
-     383                 :            :         assertEq(wMatic.balanceOf(address(FLA)), auctionRightOutbidsTopBidderFirstPair.bidAmount);
-     384                 :            : 
-     385                 :            :         // Get updated checkpoint
-     386                 :            :         vCheck = FLA.getCheckpoint(VALIDATOR1);
-     387                 :            :         (uint256 vCut2,uint256 flCut2) = _calculateCuts(auctionRightOutbidsTopBidderFirstPair.bidAmount, FLA.fast_lane_fee());
-     388                 :            :         assertTrue(vCheck.pendingBalanceAtlastBid == vCut2);
-     389                 :            :         assertTrue(vCheck.outstandingBalance == 0);
-     390                 :            :         assertTrue(vCheck.lastWithdrawnAuction == 0);
-     391                 :            :         assertTrue(vCheck.lastBidReceivedAuction == 1);
-     392                 :            : 
-     393                 :            :         assertTrue(FLA.outstandingFLBalance() == outstandingFLBalanceBeforeOutbidding - flCut + flCut2);
-     394                 :            : 
-     395                 :            : 
-     396                 :            :         vm.stopPrank();
-     397                 :            :         vm.startPrank(OWNER);
-     398                 :            : 
-     399                 :            :         uint cut = FLA.outstandingFLBalance();
-     400                 :            : 
-     401                 :            :         // Check Top Bid
-     402                 :            :         {
-     403                 :            :             (uint256 topBidAmount, uint128 currentAuctionNumber) = FLA.findLiveAuctionTopBid(VALIDATOR1, OPPORTUNITY1);
-     404                 :            :             assertEq(topBidAmount, FLA.bid_increment()*2);
-     405                 :            :             assertEq(currentAuctionNumber, 1);
-     406                 :            :         }
-     407                 :            :         FLA.endAuction();
-     408                 :            :         assertTrue(wMatic.balanceOf(OWNER) == cut);
-     409                 :            : 
-     410                 :            :         // Check Winner
-     411                 :            :         {
-     412                 :            :             (bool hasWinner, address winner, uint128 winningAuctionNumber) = FLA.findFinalizedAuctionWinnerAtAuction(1,VALIDATOR1, OPPORTUNITY1);
-     413                 :            :             assertEq(hasWinner, true);
-     414                 :            :             assertEq(winner, BIDDER2);
-     415                 :            :             assertEq(winningAuctionNumber, 1);
-     416                 :            :         }
-     417                 :            :         {
-     418                 :            :             (bool hasWinner, address winner, uint128 winningAuctionNumber) = FLA.findLastFinalizedAuctionWinner(VALIDATOR1, OPPORTUNITY1);
-     419                 :            :             assertEq(hasWinner, true);
-     420                 :            :             assertEq(winner, BIDDER2);
-     421                 :            :             assertEq(winningAuctionNumber, 1);
-     422                 :            :         }
-     423                 :            :         // Check inexistant winner
-     424                 :            :         {
-     425                 :            :             (bool hasWinner, address winner, uint128 winningAuctionNumber) = FLA.findFinalizedAuctionWinnerAtAuction(1,VALIDATOR1, OPPORTUNITY3);
-     426                 :            :             assertEq(hasWinner, false);
-     427                 :            :             assertEq(winner, address(0));
-     428                 :            :             assertEq(winningAuctionNumber, 1);
-     429                 :            :         }
-     430                 :            : 
-     431                 :            :     }
-     432                 :            : 
-     433                 :            :     function _approveAndSubmitBid(address who, Bid memory bid) internal {
-     434                 :            :         vm.startPrank(who);
-     435                 :            :         wMatic.approve(address(FLA), 2**256 - 1);
-     436                 :            :         FLA.submitBid(bid);
-     437                 :            :         vm.stopPrank();
-     438                 :            :     }
-     439                 :            : 
-     440                 :            :     function testValidatorWithdrawals() public {
-     441                 :            :         vm.startPrank(OWNER);
-     442                 :            : 
-     443                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     444                 :            :         FLA.enableValidatorAddress(VALIDATOR1);
-     445                 :            : 
-     446                 :            :         FLA.startAuction();
-     447                 :            : 
-     448                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY3);
-     449                 :            :         FLA.enableValidatorAddress(VALIDATOR3);
-     450                 :            : 
-     451                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY4);
-     452                 :            :         FLA.enableValidatorAddress(VALIDATOR4);
-     453                 :            : 
-     454                 :            :         FLA.endAuction();
-     455                 :            :         FLA.startAuction();
-     456                 :            : 
-     457                 :            :         assertTrue(FLA.auction_number() == 2);
-     458                 :            : 
-     459                 :            :         vm.stopPrank();
-     460                 :            :        
-     461                 :            :         
-     462                 :            :         Bid memory auctionRightMinimumBidWithSearcher = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment());
-     463                 :            :         Bid memory auctionRightOutbidsTopBidderFirstPair = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER2, SEARCHER_ADDRESS2, FLA.bid_increment() * 2);
-     464                 :            : 
-     465                 :            :         Bid memory auction2ndPairMinimumBidWithSearcher = Bid(VALIDATOR3, OPPORTUNITY3, BIDDER3, SEARCHER_ADDRESS3, FLA.bid_increment());
-     466                 :            :         Bid memory auction2ndPairOutbidsTopBidder2ndPair = Bid(VALIDATOR3, OPPORTUNITY3, BIDDER4, SEARCHER_ADDRESS4, FLA.bid_increment() * 2);
-     467                 :            :         
-     468                 :            :         Bid memory auction3rdPairValidator4MinimumBidWithSearcher = Bid(VALIDATOR4, OPPORTUNITY4, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment());
-     469                 :            : 
-     470                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,auctionRightMinimumBidWithSearcher);
-     471                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS2,auctionRightOutbidsTopBidderFirstPair);
-     472                 :            : 
-     473                 :            : 
-     474                 :            :         // That outbit will be claimed later after 
-     475                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS3,auction2ndPairMinimumBidWithSearcher);
-     476                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS4,auction2ndPairOutbidsTopBidder2ndPair);
-     477                 :            : 
-     478                 :            :         // That bid will be claimed partially during an ongoing auction 
-     479                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,auction3rdPairValidator4MinimumBidWithSearcher);
-     480                 :            : 
-     481                 :            : 
-     482                 :            :         vm.prank(BIDDER3);
-     483                 :            :         vm.expectRevert(FastLaneEvents.PermissionMustBeValidator.selector);
-     484                 :            :         FLA.redeemOutstandingBalance(BIDDER3);
-     485                 :            : 
-     486                 :            :         // Try to get the cash before the end
-     487                 :            :         vm.prank(VALIDATOR1);
-     488                 :            :         vm.expectRevert(FastLaneEvents.InequalityNothingToRedeem.selector);
-     489                 :            : 
-     490                 :            :         FLA.redeemOutstandingBalance(VALIDATOR1);
-     491                 :            : 
-     492                 :            :         vm.prank(OWNER);
-     493                 :            :         FLA.endAuction();
-     494                 :            : 
-     495                 :            :         // Now we can claim
-     496                 :            :         vm.startPrank(VALIDATOR1);
-     497                 :            :         ValidatorBalanceCheckpoint memory vCheck = FLA.getCheckpoint(VALIDATOR1);
-     498                 :            :         vm.expectEmit(true, true, true, true, address(FLA));
-     499                 :            :         emit ValidatorWithdrawnBalance(VALIDATOR1, 3, vCheck.pendingBalanceAtlastBid, VALIDATOR1, VALIDATOR1);
-     500                 :            :         FLA.redeemOutstandingBalance(VALIDATOR1);
-     501                 :            :         assertTrue(wMatic.balanceOf(VALIDATOR1) == vCheck.pendingBalanceAtlastBid);
-     502                 :            : 
-     503                 :            :         // Only once
-     504                 :            :         vm.expectRevert(FastLaneEvents.InequalityNothingToRedeem.selector);
-     505                 :            : 
-     506                 :            :         FLA.redeemOutstandingBalance(VALIDATOR1);
-     507                 :            : 
-     508                 :            :         vm.stopPrank();
-     509                 :            :         vm.prank(OWNER);
-     510                 :            : 
-     511                 :            :         // We go again and bid on a validator that didn't redeem anything the previous auction
-     512                 :            :         FLA.startAuction();
-     513                 :            : 
-     514                 :            :         
-     515                 :            :         // This moves pendingBalanceAtlastBid to outstandingBalance, before setting a new pendingBalanceAtlastBid
-     516                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS3,auction2ndPairMinimumBidWithSearcher);
-     517                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS4,auction2ndPairOutbidsTopBidder2ndPair);
-     518                 :            : 
-     519                 :            :         // Bidding again on an unclaimed yet pair, and trying to claim for this validator now
-     520                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,auction3rdPairValidator4MinimumBidWithSearcher);
-     521                 :            : 
-     522                 :            :         // Claim while the auction still goes on for auction3rdPairValidator4MinimumBidWithSearcher
-     523                 :            :         vm.startPrank(VALIDATOR4);
-     524                 :            :         ValidatorBalanceCheckpoint memory vCheckOngoing = FLA.getCheckpoint(VALIDATOR4);
-     525                 :            :         vm.expectEmit(true, true, true, true, address(FLA));
-     526                 :            :         emit ValidatorWithdrawnBalance(VALIDATOR4, 3, vCheckOngoing.outstandingBalance, VALIDATOR4, VALIDATOR4);
-     527                 :            :         FLA.redeemOutstandingBalance(VALIDATOR4);
-     528                 :            :         assertTrue(wMatic.balanceOf(VALIDATOR4) == vCheckOngoing.outstandingBalance);
-     529                 :            : 
-     530                 :            :         vm.stopPrank();
-     531                 :            :         vm.prank(OWNER);
-     532                 :            :         FLA.endAuction();
-     533                 :            : 
-     534                 :            :         // Now we can claim
-     535                 :            :         vm.startPrank(VALIDATOR3);
-     536                 :            :         ValidatorBalanceCheckpoint memory vCheckLate = FLA.getCheckpoint(VALIDATOR3);
-     537                 :            :         vm.expectEmit(true, true, true, true, address(FLA));
-     538                 :            :         emit ValidatorWithdrawnBalance(VALIDATOR3, 4, vCheckLate.pendingBalanceAtlastBid + vCheckLate.outstandingBalance, VALIDATOR3, VALIDATOR3);
-     539                 :            :         FLA.redeemOutstandingBalance(VALIDATOR3);
-     540                 :            :         assertTrue(wMatic.balanceOf(VALIDATOR3) == vCheckLate.pendingBalanceAtlastBid + vCheckLate.outstandingBalance);
-     541                 :            : 
-     542                 :            :         // Only once
-     543                 :            :         vm.expectRevert(FastLaneEvents.InequalityNothingToRedeem.selector);
-     544                 :            : 
-     545                 :            :         FLA.redeemOutstandingBalance(VALIDATOR1);
-     546                 :            : 
-     547                 :            :         // Finish draining validator4 so everyone is paid
-     548                 :            :         FLA.redeemOutstandingBalance(VALIDATOR4);
-     549                 :            :         assertTrue(wMatic.balanceOf(address(FLA)) == 0); // Everyone got paid, no more wMatic hanging in the contract
-     550                 :            :     }
-     551                 :            : 
-     552                 :            :     function testBidIncrement() public {
-     553                 :            :         vm.startPrank(OWNER);
-     554                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     555                 :            :         FLA.enableValidatorAddress(VALIDATOR1);
-     556                 :            :         FLA.setMinimumBidIncrement(1000*10**18);
-     557                 :            :         FLA.startAuction();
-     558                 :            :         Bid memory bidTooLow = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, 100);
-     559                 :            :         vm.stopPrank();
-     560                 :            :         vm.startPrank(bidTooLow.searcherPayableAddress);
-     561                 :            :         wMatic.approve(address(FLA), 2**256 - 1);
-     562                 :            :         vm.expectRevert(FastLaneEvents.InequalityTooLow.selector);
-     563                 :            :         FLA.submitBid(bidTooLow);
-     564                 :            :         vm.stopPrank();
-     565                 :            :         vm.prank(OWNER);
-     566                 :            :         FLA.setMinimumBidIncrement(99);
-     567                 :            :         vm.startPrank(bidTooLow.searcherPayableAddress);
-     568                 :            :         FLA.submitBid(bidTooLow);
-     569                 :            :     }
-     570                 :            : 
-     571                 :            :     function testEnabledDisabledPairs() public {
-     572                 :            :         vm.startPrank(OWNER);
-     573                 :            : 
-     574                 :            :         // Enabling disabling opp or validator during auction not live
-     575                 :            :         // Should be no problem
-     576                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     577                 :            :         vm.expectEmit(true, true, false, false, address(FLA));
-     578                 :            :         emit OpportunityAddressDisabled(OPPORTUNITY1, 1);
-     579                 :            :         FLA.disableOpportunityAddress(OPPORTUNITY1);
-     580                 :            : 
-     581                 :            : 
-     582                 :            : 
-     583                 :            :         // Disabling unseen opportunity should revert
-     584                 :            :         vm.expectRevert(FastLaneEvents.PermissionInvalidOpportunityAddress.selector);
-     585                 :            :         FLA.disableOpportunityAddress(OPPORTUNITY4);
-     586                 :            : 
-     587                 :            :         // Re-enable 1 while not live
-     588                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     589                 :            : 
-     590                 :            :         FLA.enableValidatorAddress(VALIDATOR1);
-     591                 :            : 
-     592                 :            :         vm.expectRevert(FastLaneEvents.PermissionMustBeValidator.selector);
-     593                 :            :         FLA.disableValidatorAddress(VALIDATOR2);
-     594                 :            : 
-     595                 :            : 
-     596                 :            :         // Auction is now live, disables should be delayed
-     597                 :            :         FLA.startAuction();
-     598                 :            : 
-     599                 :            :         vm.expectEmit(true, true, false, false, address(FLA));
-     600                 :            :         emit OpportunityAddressDisabled(OPPORTUNITY1, 2);
-     601                 :            :         FLA.disableOpportunityAddress(OPPORTUNITY1);
-     602                 :            : 
-     603                 :            :         vm.expectEmit(true, true, false, false, address(FLA));
-     604                 :            :         emit ValidatorAddressDisabled(VALIDATOR1, 2);
-     605                 :            :         FLA.disableValidatorAddress(VALIDATOR1);
-     606                 :            : 
-     607                 :            :         // Should still be able to bid and outbid
-     608                 :            :         Bid memory auctionRightMinimumBidWithSearcher = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment());
-     609                 :            :         Bid memory auctionRightOutbidsTopBidderFirstPair = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER2, SEARCHER_ADDRESS2, FLA.bid_increment() * 2);
-     610                 :            : 
-     611                 :            :         vm.stopPrank();
-     612                 :            : 
-     613                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,auctionRightMinimumBidWithSearcher);
-     614                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS2,auctionRightOutbidsTopBidderFirstPair);
-     615                 :            : 
-     616                 :            : 
-     617                 :            :         vm.startPrank(OWNER);
-     618                 :            :         FLA.endAuction();
-     619                 :            :         FLA.startAuction();
-     620                 :            : 
-     621                 :            :         // Not anymore
-     622                 :            :         vm.stopPrank();
-     623                 :            :         vm.startPrank(SEARCHER_ADDRESS1);
-     624                 :            :         vm.expectRevert(FastLaneEvents.InequalityValidatorDisabledAtTime.selector);
-     625                 :            :         FLA.submitBid(auctionRightMinimumBidWithSearcher);
-     626                 :            : 
-     627                 :            :         vm.stopPrank();
-     628                 :            :         vm.startPrank(OWNER);
-     629                 :            : 
-     630                 :            : 
-     631                 :            :         assertTrue(FLA.auction_number() == 2);
-     632                 :            : 
-     633                 :            :         // Doesn't impact validator collecting
-     634                 :            :         ValidatorBalanceCheckpoint memory vCheck = FLA.getCheckpoint(VALIDATOR1);
-     635                 :            : 
-     636                 :            :         FLA.redeemOutstandingBalance(VALIDATOR1);
-     637                 :            :         assertTrue(wMatic.balanceOf(VALIDATOR1) == vCheck.pendingBalanceAtlastBid);
-     638                 :            :         
-     639                 :            : 
-     640                 :            :         vm.stopPrank();
-     641                 :            :         vm.startPrank(SEARCHER_ADDRESS1);
-     642                 :            :         vm.expectRevert(FastLaneEvents.InequalityValidatorDisabledAtTime.selector);
-     643                 :            :         FLA.submitBid(auctionRightMinimumBidWithSearcher);
-     644                 :            : 
-     645                 :            :         // Re-enable while live
-     646                 :            :         vm.stopPrank();
-     647                 :            :         vm.startPrank(OWNER);
-     648                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     649                 :            :         FLA.enableValidatorAddress(VALIDATOR1);
-     650                 :            : 
-     651                 :            :         // Should still be locked until next auction
-     652                 :            :         vm.stopPrank();
-     653                 :            :         vm.startPrank(SEARCHER_ADDRESS1);
-     654                 :            :         vm.expectRevert(FastLaneEvents.InequalityValidatorNotEnabledYet.selector);
-     655                 :            : 
-     656                 :            :         FLA.submitBid(auctionRightMinimumBidWithSearcher);
-     657                 :            : 
-     658                 :            :         vm.stopPrank();
-     659                 :            :         vm.startPrank(OWNER);
-     660                 :            :         FLA.endAuction();
-     661                 :            :         FLA.startAuction();
-     662                 :            : 
-     663                 :            :         // Now we can submit again
-     664                 :            :         vm.stopPrank();
-     665                 :            :         vm.prank(SEARCHER_ADDRESS1);
-     666                 :            :         FLA.submitBid(auctionRightMinimumBidWithSearcher);
-     667                 :            : 
-     668                 :            :         vm.startPrank(OWNER);
-     669                 :            :         FLA.disableOpportunityAddress(OPPORTUNITY1);
-     670                 :            :         FLA.endAuction();
-     671                 :            :         FLA.startAuction();
-     672                 :            :         
-     673                 :            :         vm.stopPrank();
-     674                 :            :         vm.prank(SEARCHER_ADDRESS1);
-     675                 :            :         vm.expectRevert(FastLaneEvents.InequalityOpportunityDisabledAtTime.selector);
-     676                 :            : 
-     677                 :            :         FLA.submitBid(auctionRightMinimumBidWithSearcher);
-     678                 :            : 
-     679                 :            :         vm.prank(OWNER);
-     680                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     681                 :            :         vm.prank(SEARCHER_ADDRESS1);
-     682                 :            :         vm.expectRevert(FastLaneEvents.InequalityOpportunityNotEnabledYet.selector);
-     683                 :            : 
-     684                 :            :         FLA.submitBid(auctionRightMinimumBidWithSearcher);
-     685                 :            : 
-     686                 :            :     }
-     687                 :            : 
-     688                 :            :     function testPausedState() public {
-     689                 :            :         vm.startPrank(OWNER);
-     690                 :            :         vm.expectEmit(true, true, false, false, address(FLA));
-     691                 :            :         emit PausedStateSet(true);
-     692                 :            :         FLA.setPausedState(true);
-     693                 :            :         FLA.startAuction();
-     694                 :            :         vm.expectRevert(FastLaneEvents.PermissionPaused.selector);
-     695                 :            :         Bid memory auctionRightMinimumBidWithSearcher = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, 2000*10**18);
-     696                 :            :         FLA.submitBid(auctionRightMinimumBidWithSearcher);
-     697                 :            :     }
-     698                 :            : 
-     699                 :            :     function testValidatorPreferences() public {
-     700                 :            :         vm.startPrank(OWNER);
-     701                 :            :         
-     702                 :            :         uint24 fee = 50000*2; // 10%
-     703                 :            :         FLA.setFastlaneFee(fee);
-     704                 :            : 
-     705                 :            :         address validatorPayable = 0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf;
-     706                 :            :         uint128 amount = 3000*10**18;
-     707                 :            :         vm.expectEmit(true, true, false, false, address(FLA));
-     708                 :            :         emit ValidatorAddressEnabled(VALIDATOR1, 1);
-     709                 :            :         FLA.enableValidatorAddressWithPreferences(VALIDATOR1, amount, validatorPayable);
-     710                 :            : 
-     711                 :            :         vm.expectEmit(true, true, true, false, address(FLA));
-     712                 :            :         emit ValidatorPreferencesSet(VALIDATOR1, amount, validatorPayable);
-     713                 :            :         FLA.enableValidatorAddressWithPreferences(VALIDATOR1, amount, validatorPayable);
-     714                 :            : 
-     715                 :            :         vm.stopPrank();
-     716                 :            : 
-     717                 :            :         vm.prank(BIDDER1);
-     718                 :            :         vm.expectRevert(FastLaneEvents.PermissionMustBeValidator.selector);
-     719                 :            :         FLA.setValidatorPreferences(0, address(0));
-     720                 :            : 
-     721                 :            : 
-     722                 :            :         vm.startPrank(VALIDATOR1);
-     723                 :            :         address validatorPayableUpdated = 0x8e5f4552091a69125d5DfCb7B8C2659029395Bdf;
-     724                 :            :         uint128 updatedAmountTooLow = 4000;
-     725                 :            :         vm.expectRevert(FastLaneEvents.InequalityTooLow.selector);
-     726                 :            :         FLA.setValidatorPreferences(updatedAmountTooLow, validatorPayableUpdated);
-     727                 :            : 
-     728                 :            :         uint128 updatedAmount = 5000*10**18;
-     729                 :            : 
-     730                 :            :         vm.expectRevert(FastLaneEvents.InequalityAddressMismatch.selector);
-     731                 :            :         FLA.setValidatorPreferences(updatedAmount, address(FLA));
-     732                 :            : 
-     733                 :            : 
-     734                 :            :         vm.expectEmit(true, true, true, false, address(FLA));
-     735                 :            :         emit ValidatorPreferencesSet(VALIDATOR1, updatedAmount, validatorPayableUpdated);
-     736                 :            :         FLA.setValidatorPreferences(updatedAmount, validatorPayableUpdated);
-     737                 :            : 
-     738                 :            :         // Now make a bid
-     739                 :            :         vm.stopPrank();
-     740                 :            :         vm.startPrank(OWNER);
-     741                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     742                 :            :         FLA.startAuction();
-     743                 :            :         vm.stopPrank();
-     744                 :            :         Bid memory auctionRightMinimumBidWithSearcher = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment());
-     745                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,auctionRightMinimumBidWithSearcher);
-     746                 :            : 
-     747                 :            :         vm.startPrank(OWNER);
-     748                 :            :         FLA.endAuction();
-     749                 :            :         FLA.redeemOutstandingBalance(VALIDATOR1);
-     750                 :            :         assertTrue(wMatic.balanceOf(validatorPayableUpdated) == 9000000000000000000);
-     751                 :            :     }
-     752                 :            : 
-     753                 :            :     // Avoid foundry stack too deep
-     754                 :            :     function _splitTestGelatoPreStartChecker() internal {
-     755                 :            :                 {
-     756                 :            :          (bool canExec, bytes memory execPayload) = FLA.checker();
-     757                 :            : 
-     758                 :            :          assertTrue(canExec == false);
-     759                 :            :          assertTrue(execPayload.length == 0); 
-     760                 :            :         }
-     761                 :            : 
-     762                 :            : 
-     763                 :            :          FLA.startAuction();
-     764                 :            :          FLA.endAuction(); // auction_index == 2
-     765                 :            : 
-     766                 :            :         {
-     767                 :            :          (bool canExec, bytes memory execPayload) = FLA.checker();
-     768                 :            : 
-     769                 :            :          assertTrue(canExec == false);
-     770                 :            :          assertTrue(execPayload.length == 0); 
-     771                 :            :         }
-     772                 :            : 
-     773                 :            :          FLA.startAuction();
-     774                 :            : 
-     775                 :            :     }
-     776                 :            :     function testGelatoAutoship() public {
-     777                 :            : 
-     778                 :            :         // Pump SEARCHER_ADDRESS1 balances since he'll be bidding on all validators
-     779                 :            :         vm.deal(SEARCHER_ADDRESS1,1000000*10**18);
-     780                 :            :         vm.prank(SEARCHER_ADDRESS1);
-     781                 :            :         wMatic.deposit{value: 1000000*10**18}();
-     782                 :            : 
-     783                 :            :         vm.startPrank(OWNER);
-     784                 :            :         uint24 fee = 0; // 0% so calculations are easier
-     785                 :            :         FLA.setFastlaneFee(fee);
-     786                 :            :         uint128 minAutoship = 2000 * (10**18);
-     787                 :            :         FLA.setMinimumAutoShipThreshold(minAutoship);
-     788                 :            :         // Force 2 payments per checker() call max
-     789                 :            :         FLA.setAutopayBatchSize(2);
-     790                 :            :         // First validator setup with enableValidatorAddressWithPreferences
-     791                 :            :         address validatorPayable1 = vm.addr(1);
-     792                 :            :         uint128 amount1 = minAutoship;
-     793                 :            :         FLA.enableValidatorAddressWithPreferences(VALIDATOR1, amount1, validatorPayable1);
-     794                 :            : 
-     795                 :            :         // 2nd validator setup with enableValidatorAddressWithPreferences as himself
-     796                 :            :         uint128 amount2 = minAutoship*2;
-     797                 :            :         FLA.enableValidatorAddressWithPreferences(VALIDATOR2, amount2, VALIDATOR2);
-     798                 :            : 
-     799                 :            :         // 3rd set up without autoship originally then adds it himself
-     800                 :            :         FLA.enableValidatorAddress(VALIDATOR3);
-     801                 :            :          uint128 amount3 = minAutoship*3;
-     802                 :            :          address validatorPayable3 = vm.addr(3);
-     803                 :            :          vm.stopPrank();
-     804                 :            :          vm.prank(VALIDATOR3);
-     805                 :            :          FLA.setValidatorPreferences(amount3, validatorPayable3);
-     806                 :            : 
-     807                 :            :          // 4th didn't ask for anything, he'll get default autoship
-     808                 :            :          vm.startPrank(OWNER);
-     809                 :            :          FLA.enableValidatorAddress(VALIDATOR4);
-     810                 :            :          
-     811                 :            :          // Now the opp
-     812                 :            :          FLA.enableOpportunityAddress(OPPORTUNITY1);
-     813                 :            :         
-     814                 :            :         _splitTestGelatoPreStartChecker(); // auction_index == 2
-     815                 :            : 
-     816                 :            :          vm.stopPrank();
-     817                 :            :          // Validator 1 will get his threshold met directly
-     818                 :            :          Bid memory bid1 = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, amount1);
-     819                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,bid1);
-     820                 :            : 
-     821                 :            :          // Validator 2 will get his threshold met in 2 steps
-     822                 :            :          Bid memory bid2 = Bid(VALIDATOR2, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, amount2/2);
-     823                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,bid2);
-     824                 :            : 
-     825                 :            :          // Validator 3 will get his threshold met directly
-     826                 :            :          Bid memory bid3 = Bid(VALIDATOR3, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, amount3);
-     827                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,bid3);
-     828                 :            : 
-     829                 :            :          // Validator 4 will get his threshold met directly
-     830                 :            :          Bid memory bid4 = Bid(VALIDATOR4, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, minAutoship);
-     831                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,bid4);
-     832                 :            : 
-     833                 :            :         // Check validatorsactiveAtAuctionRound
-     834                 :            :         {
-     835                 :            :         address[] memory prevRoundAddrs = FLA.getValidatorsactiveAtAuctionRound(2);
-     836                 :            : 
-     837                 :            :         // Should have 4 validators active
-     838                 :            :         assertEq(prevRoundAddrs.length,4);
-     839                 :            :         }
-     840                 :            : 
-     841                 :            : 
-     842                 :            :         // Verify checker still doesn't run
-     843                 :            :         {
-     844                 :            :          (bool canExecR1, bytes memory execPayloadR1) = FLA.checker();
-     845                 :            : 
-     846                 :            :          assertTrue(canExecR1 == false);
-     847                 :            :          assertTrue(execPayloadR1.length == 0); 
-     848                 :            :         }
-     849                 :            :         // Turn off checker
-     850                 :            : 
-     851                 :            :         vm.startPrank(OWNER);
-     852                 :            :         FLA.setOffchainCheckerDisabledState(true);
-     853                 :            :         FLA.endAuction(); // auction_index == 3
-     854                 :            :         FLA.startAuction();
-     855                 :            : 
-     856                 :            :         // Verify checker still doesn't run even if it could from balances
-     857                 :            :         {
-     858                 :            :          (bool canExecR2, bytes memory execPayloadR2) = FLA.checker();
-     859                 :            : 
-     860                 :            :          assertTrue(canExecR2 == false);
-     861                 :            :          assertTrue(execPayloadR2.length == 0); 
-     862                 :            :         }
-     863                 :            : 
-     864                 :            :         // New bid on new auction_number so balances of VALIDATOR1 are moved to outstanding.
-     865                 :            :         // Should not impact anything
-     866                 :            :         vm.stopPrank();
-     867                 :            :          _approveAndSubmitBid(SEARCHER_ADDRESS1,bid1);
-     868                 :            :         vm.startPrank(OWNER);
-     869                 :            :         // Turn it back on and witness payments of 2
-     870                 :            :         FLA.setOffchainCheckerDisabledState(false);
-     871                 :            : 
-     872                 :            :         {
-     873                 :            :             ValidatorBalanceCheckpoint memory vCheckOngoing = FLA.getCheckpoint(VALIDATOR1);
-     874                 :            :             assertTrue(vCheckOngoing.outstandingBalance >= amount1);
-     875                 :            :         }
-     876                 :            : 
-     877                 :            :         {
-     878                 :            :         (bool hasJobs,) = FLA.getAutopayJobs(2, 2);
-     879                 :            :         assertEq(hasJobs, true);
-     880                 :            :         }
-     881                 :            : 
-     882                 :            :         (bool canExec, bytes memory execPayload) = FLA.checker();
-     883                 :            : 
-     884                 :            :          assertTrue(canExec == true);
-     885                 :            :          assertTrue(execPayload.length > 0);
-     886                 :            :         
-     887                 :            : 
-     888                 :            :         vm.stopPrank();
-     889                 :            :         vm.startPrank(OPS_ADDRESS);
-     890                 :            :         {
-     891                 :            :         // Validator 1 and 3 should have been autoshipped
-     892                 :            :         vm.expectEmit(true, true, true, true, address(FLA));
-     893                 :            :         emit ValidatorWithdrawnBalance(VALIDATOR1, 3, 2000 * (10**18), vm.addr(1), OPS_ADDRESS);
-     894                 :            :         
-     895                 :            :         vm.expectEmit(true, true, true, true, address(FLA));
-     896                 :            :         emit ValidatorWithdrawnBalance(VALIDATOR3, 3, 6000 * (10**18), vm.addr(3), OPS_ADDRESS);
-     897                 :            : 
-     898                 :            : 
-     899                 :            :         (bool success,) = address(FLA).call(execPayload);
-     900                 :            :          assertTrue(success);
-     901                 :            :         }
-     902                 :            :     
-     903                 :            :         // Call it again and witness payment of 1
-     904                 :            :         {
-     905                 :            :             (bool hasJobs4,) = FLA.getAutopayJobs(2, 2);
-     906                 :            :             assertEq(hasJobs4, true);
-     907                 :            : 
-     908                 :            :             (bool canExec4, bytes memory execPayload4) = FLA.checker();
-     909                 :            : 
-     910                 :            :              assertTrue(canExec4 == true);
-     911                 :            :              assertTrue(execPayload4.length > 0);
-     912                 :            :             // Validator 4 will get autoship
-     913                 :            :             vm.expectEmit(true, true, true, true, address(FLA));
-     914                 :            :             emit ValidatorWithdrawnBalance(VALIDATOR4, 3, 2000 * (10**18), VALIDATOR4, OPS_ADDRESS);
-     915                 :            : 
-     916                 :            :             (bool success,) = address(FLA).call(execPayload4);
-     917                 :            :             assertTrue(success);
-     918                 :            : 
-     919                 :            :             // No more folks to handle
-     920                 :            :             (bool canExec5,) = FLA.checker();
-     921                 :            :             assertTrue(canExec5 == false);
-     922                 :            :         }
-     923                 :            : 
-     924                 :            : 
-     925                 :            :     }
-     926                 :            : 
-     927                 :            :     function testRedeemableOutstanding() public {
-     928                 :            : 
-     929                 :            :         // Pump SEARCHER_ADDRESS1 balances since he'll be bidding on all validators
-     930                 :            :         vm.deal(SEARCHER_ADDRESS1,1000000*10**18);
-     931                 :            :         vm.prank(SEARCHER_ADDRESS1);
-     932                 :            :         wMatic.deposit{value: 1000000*10**18}();
-     933                 :            : 
-     934                 :            :         vm.startPrank(OWNER);
-     935                 :            :         uint24 fee = 0; // 0% so calculations are easier
-     936                 :            :         FLA.setFastlaneFee(fee);
-     937                 :            :         uint128 minAutoship = 2000 * (10**18);
-     938                 :            :         FLA.setMinimumAutoShipThreshold(minAutoship);
-     939                 :            :         // Force 2 payments per checker() call max
-     940                 :            :         FLA.setAutopayBatchSize(2);
-     941                 :            :         // First validator setup with enableValidatorAddressWithPreferences
-     942                 :            :         address validatorPayable1 = vm.addr(1);
-     943                 :            :         uint128 amount1 = minAutoship;
-     944                 :            :         FLA.enableValidatorAddressWithPreferences(VALIDATOR1, amount1, validatorPayable1);
-     945                 :            : 
-     946                 :            :         // 2nd validator setup with enableValidatorAddressWithPreferences as himself
-     947                 :            :         uint128 amount2 = minAutoship*2; // Autoship at 4k
-     948                 :            :         FLA.enableValidatorAddressWithPreferences(VALIDATOR2, amount2, VALIDATOR2);
-     949                 :            : 
-     950                 :            :          // Now the opp
-     951                 :            :          FLA.enableOpportunityAddress(OPPORTUNITY1);
-     952                 :            :         
-     953                 :            :         _splitTestGelatoPreStartChecker(); // auction_index == 2
-     954                 :            : 
-     955                 :            :          vm.stopPrank();
-     956                 :            :          // Validator 1 will get his threshold met directly
-     957                 :            :          Bid memory bid1 = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, amount1);
-     958                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,bid1);
-     959                 :            : 
-     960                 :            :          // Validator 2 will get his threshold met in 2 steps
-     961                 :            :          Bid memory bid2 = Bid(VALIDATOR2, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, amount2/2);
-     962                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,bid2);
-     963                 :            : 
-     964                 :            :         // Check validatorsactiveAtAuctionRound
-     965                 :            :         {
-     966                 :            :         address[] memory prevRoundAddrs = FLA.getValidatorsactiveAtAuctionRound(2);
-     967                 :            : 
-     968                 :            :         // Should have 2 validators active
-     969                 :            :         assertEq(prevRoundAddrs.length,2);
-     970                 :            :         }
-     971                 :            : 
-     972                 :            : 
-     973                 :            :         // Verify checker still doesn't run
-     974                 :            :         {
-     975                 :            :          (bool canExec1, bytes memory execPayload1) = FLA.checker();
-     976                 :            : 
-     977                 :            :          assertTrue(canExec1 == false);
-     978                 :            :          assertTrue(execPayload1.length == 0); 
-     979                 :            :         }
-     980                 :            : 
-     981                 :            :         (bool hasJobs, address[] memory autopayRecipients) = FLA.getAutopayJobs(2, 2);
-     982                 :            :         assertEq(hasJobs, false);
-     983                 :            :         assertEq(autopayRecipients[0],address(0));
-     984                 :            :         assertEq(autopayRecipients[1],address(0));
-     985                 :            : 
-     986                 :            :         vm.startPrank(OWNER);
-     987                 :            :         FLA.endAuction(); // auction_index == 3
-     988                 :            :         FLA.startAuction();
-     989                 :            : 
-     990                 :            :         {
-     991                 :            :             ValidatorBalanceCheckpoint memory vCheckOngoing = FLA.getCheckpoint(VALIDATOR1);
-     992                 :            :             assertEq(vCheckOngoing.pendingBalanceAtlastBid, amount1);
-     993                 :            :         }
-     994                 :            : 
-     995                 :            :         {
-     996                 :            :             ValidatorPreferences memory valPrefs = FLA.getPreferences(VALIDATOR2);
-     997                 :            :             assertEq(valPrefs.minAutoshipAmount, 4000 * (10**18));
-     998                 :            : 
-     999                 :            :             ValidatorBalanceCheckpoint memory vCheckOngoing = FLA.getCheckpoint(VALIDATOR2);
-    1000                 :            :             assertEq(vCheckOngoing.pendingBalanceAtlastBid, amount2/2);
-    1001                 :            :             assertEq(vCheckOngoing.outstandingBalance, 0);
-    1002                 :            :             // Forge coverage being drunk ? Says checkRedeemableOutstanding never branches out
-    1003                 :            :             // Making _checkRedeemableOutstanding -> checkRedeemableOutstanding (public) and testing
-    1004                 :            :             // both variations still trips out coverage
-    1005                 :            :             // bool isRedeemable = FLA.checkRedeemableOutstanding(vCheckOngoing, valPrefs.minAutoshipAmount);
-    1006                 :            :             // assertEq(isRedeemable, false);
-    1007                 :            :         }
-    1008                 :            : 
-    1009                 :            : 
-    1010                 :            : 
-    1011                 :            :         
-    1012                 :            :         (hasJobs, autopayRecipients) = FLA.getAutopayJobs(2, 2);
-    1013                 :            :         assertEq(hasJobs, true);
-    1014                 :            :         assertEq(autopayRecipients[0],VALIDATOR1);
-    1015                 :            :         assertEq(autopayRecipients[1],address(0));
-    1016                 :            :         
-    1017                 :            : 
-    1018                 :            :         (bool canExec, bytes memory execPayload) = FLA.checker();
-    1019                 :            : 
-    1020                 :            :          assertTrue(canExec == true);
-    1021                 :            :          assertTrue(execPayload.length > 0);
-    1022                 :            :         
-    1023                 :            : 
-    1024                 :            :         vm.stopPrank();
-    1025                 :            :         vm.startPrank(OPS_ADDRESS);
-    1026                 :            :         {
-    1027                 :            :         // Validator 1 should have been autoshipped
-    1028                 :            :         vm.expectEmit(true, true, true, true, address(FLA));
-    1029                 :            :         emit ValidatorWithdrawnBalance(VALIDATOR1, 3, 2000 * (10**18), vm.addr(1), OPS_ADDRESS);
-    1030                 :            :         
-    1031                 :            :         (bool success,) = address(FLA).call(execPayload);
-    1032                 :            :          assertTrue(success);
-    1033                 :            :         }
-    1034                 :            : 
-    1035                 :            :         (hasJobs,autopayRecipients) = FLA.getAutopayJobs(2, 2);
-    1036                 :            :         assertEq(hasJobs, false);
-    1037                 :            :         assertEq(autopayRecipients[0],address(0));
-    1038                 :            :         assertEq(autopayRecipients[1],address(0));
-    1039                 :            : 
-    1040                 :            :         vm.stopPrank();
-    1041                 :            :         vm.startPrank(OWNER);
-    1042                 :            :         FLA.endAuction();
-    1043                 :            :         FLA.startAuction();
-    1044                 :            :         vm.stopPrank();
-    1045                 :            : 
-    1046                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,bid2);
-    1047                 :            : 
-    1048                 :            :         (hasJobs,autopayRecipients) = FLA.getAutopayJobs(2, 2);
-    1049                 :            :         assertEq(hasJobs, false);
-    1050                 :            :         assertEq(autopayRecipients[0],address(0));
-    1051                 :            :         assertEq(autopayRecipients[1],address(0));
-    1052                 :            : 
-    1053                 :            :         vm.startPrank(OWNER);
-    1054                 :            :         FLA.endAuction();
-    1055                 :            :         FLA.startAuction();
-    1056                 :            : 
-    1057                 :            :         (hasJobs,autopayRecipients) = FLA.getAutopayJobs(2, 2);
-    1058                 :            :         assertEq(hasJobs, true);
-    1059                 :            :         assertEq(autopayRecipients[0],VALIDATOR2);
-    1060                 :            :         assertEq(autopayRecipients[1],address(0));
-    1061                 :            : 
-    1062                 :            :         {
-    1063                 :            :             ValidatorBalanceCheckpoint memory vCheckOngoing = FLA.getCheckpoint(VALIDATOR2);
-    1064                 :            :             assertEq(vCheckOngoing.pendingBalanceAtlastBid, amount2/2);
-    1065                 :            :             assertEq(vCheckOngoing.outstandingBalance, amount2/2);
-    1066                 :            :             // bool isRedeemable = FLA.checkRedeemableOutstanding(vCheckOngoing, 4000*10**18);
-    1067                 :            :             // assertEq(isRedeemable, true);
-    1068                 :            :         }
-    1069                 :            : 
-    1070                 :            :         (canExec, execPayload) = FLA.checker();
-    1071                 :            : 
-    1072                 :            :          assertTrue(canExec == true);
-    1073                 :            :          assertTrue(execPayload.length > 0);
-    1074                 :            :         
-    1075                 :            : 
-    1076                 :            :         vm.stopPrank();
-    1077                 :            :         vm.startPrank(OPS_ADDRESS);
-    1078                 :            :         {
-    1079                 :            :         // Validator 2 should have been autoshipped
-    1080                 :            :         vm.expectEmit(true, true, true, true, address(FLA));
-    1081                 :            :         emit ValidatorWithdrawnBalance(VALIDATOR2, 5, 4000 * (10**18), VALIDATOR2, OPS_ADDRESS);
-    1082                 :            :         
-    1083                 :            :         (bool success,) = address(FLA).call(execPayload);
-    1084                 :            :          assertTrue(success);
-    1085                 :            :         }
-    1086                 :            : 
-    1087                 :            :     }
-    1088                 :            : 
-    1089                 :            :     function testReinitSetup() public {
-    1090                 :            :         vm.expectRevert(FastLaneEvents.TimeAlreadyInit.selector);
-    1091                 :            :         vm.prank(OWNER);
-    1092                 :            :         FLA.initialSetupAuction(vm.addr(1),OPS_ADDRESS, VALIDATOR2);
-    1093                 :            :     }
-    1094                 :            : 
-    1095                 :            :     function testAutoshipThreshold() public {
-    1096                 :            :         vm.startPrank(OWNER);
-    1097                 :            :         uint128 minAutoship = 10000*10**18;
-    1098                 :            :         vm.expectEmit(true, false, false, false, address(FLA));
-    1099                 :            :         emit MinimumAutoshipThresholdSet(minAutoship);
-    1100                 :            :         FLA.setMinimumAutoShipThreshold(minAutoship);
-    1101                 :            :     }
-    1102                 :            : 
-    1103                 :            :     function testGasChecker() public {
-    1104                 :            : 
-    1105                 :            :         // Pump SEARCHER_ADDRESS1 balances since he'll be bidding on all validators
-    1106                 :            :         vm.deal(SEARCHER_ADDRESS1,1000000*10**18);
-    1107                 :            :         vm.prank(SEARCHER_ADDRESS1);
-    1108                 :            :         wMatic.deposit{value: 1000000*10**18}();
-    1109                 :            : 
-    1110                 :            :         vm.startPrank(OWNER);
-    1111                 :            :         uint24 fee = 0; // 0% so calculations are easier
-    1112                 :            :         FLA.setFastlaneFee(fee);
-    1113                 :            :         uint128 minAutoship = 2000 * (10**18);
-    1114                 :            :         FLA.setMinimumAutoShipThreshold(minAutoship);
-    1115                 :            :         // Force 2 payments per checker() call max
-    1116                 :            :         FLA.setAutopayBatchSize(2);
-    1117                 :            :         // First validator setup with enableValidatorAddressWithPreferences
-    1118                 :            :         address validatorPayable1 = vm.addr(1);
-    1119                 :            :         uint128 amount1 = minAutoship;
-    1120                 :            :         FLA.enableValidatorAddressWithPreferences(VALIDATOR1, amount1, validatorPayable1);
-    1121                 :            : 
-    1122                 :            :         // Now the opp
-    1123                 :            :          FLA.enableOpportunityAddress(OPPORTUNITY1);
-    1124                 :            :         
-    1125                 :            :         _splitTestGelatoPreStartChecker(); // auction_index == 2
-    1126                 :            : 
-    1127                 :            :          vm.stopPrank();
-    1128                 :            :          // Validator 1 will get his threshold met directly
-    1129                 :            :          Bid memory bid1 = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, amount1);
-    1130                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,bid1);
-    1131                 :            : 
-    1132                 :            :         // Check validatorsactiveAtAuctionRound
-    1133                 :            :         {
-    1134                 :            :         address[] memory prevRoundAddrs = FLA.getValidatorsactiveAtAuctionRound(2);
-    1135                 :            : 
-    1136                 :            :         // Should have 1 validator active
-    1137                 :            :         assertEq(prevRoundAddrs.length,1);
-    1138                 :            :         }
-    1139                 :            : 
-    1140                 :            : 
-    1141                 :            :         // Verify checker still doesn't run
-    1142                 :            :         {
-    1143                 :            :          (bool canExecR1, bytes memory execPayloadR1) = FLA.checker();
-    1144                 :            : 
-    1145                 :            :          assertTrue(canExecR1 == false);
-    1146                 :            :          assertTrue(execPayloadR1.length == 0); 
-    1147                 :            :         }
-    1148                 :            :         // Turn off checker with gas
-    1149                 :            : 
-    1150                 :            :         vm.startPrank(OWNER);
-    1151                 :            :         vm.expectEmit(true, false, false, false, address(FLA));
-    1152                 :            :         emit ResolverMaxGasPriceSet(0);
-    1153                 :            :         FLA.setResolverMaxGasPrice(0);
-    1154                 :            :         
-    1155                 :            :         FLA.endAuction(); // auction_index == 3
-    1156                 :            :         FLA.startAuction();
-    1157                 :            : 
-    1158                 :            :         vm.expectEmit(true, false, false, false, address(FLA));
-    1159                 :            :         emit OpsSet(vm.addr(1337));
-    1160                 :            :         FLA.setOps(vm.addr(1337));
-    1161                 :            :         vm.stopPrank();
-    1162                 :            : 
-    1163                 :            :         vm.startPrank(vm.addr(1337));
-    1164                 :            :         // Verify checker still doesn't run even if it could from balances
-    1165                 :            :         (bool canExec, bytes memory execPayload) = FLA.checker();
-    1166                 :            : 
-    1167                 :            :         assertTrue(canExec == false);
-    1168                 :            :         assertTrue(execPayload.length == 0);
-    1169                 :            : 
-    1170                 :            :         address[] memory recipients = new address[](2);
-    1171                 :            :         recipients[1] = vm.addr(1);
-    1172                 :            :         vm.expectRevert(FastLaneEvents.TimeGasNotSuitable.selector);
-    1173                 :            : 
-    1174                 :            :         FLA.processAutopayJobs(recipients);
-    1175                 :            :         
-    1176                 :            :         vm.stopPrank();
-    1177                 :            :         vm.prank(OWNER);
-    1178                 :            :         FLA.setResolverMaxGasPrice(10*10**18);
-    1179                 :            : 
-    1180                 :            :         vm.startPrank(vm.addr(1337));
-    1181                 :            :         (canExec, execPayload) = FLA.checker();
-    1182                 :            :         assertTrue(canExec == true);
-    1183                 :            :     }
-    1184                 :            : 
-    1185                 :            :     function testEmergencyWithdraw() public {
-    1186                 :            :         vm.deal(address(FLA),10*10**18);
-    1187                 :            :         
-    1188                 :            :         vm.startPrank(OWNER);
-    1189                 :            :         vm.expectEmit(true, true, false, false, address(FLA));
-    1190                 :            :         emit WithdrawStuckNativeToken(OWNER, 10*10**18);
-    1191                 :            :         FLA.withdrawStuckNativeToken(10*10**18);
-    1192                 :            :         assertEq(OWNER.balance, 10*10**18);
-    1193                 :            : 
-    1194                 :            :         MockERC20 token = new MockERC20("Token", "TKN", 18);
-    1195                 :            :         token.mint(address(FLA), 1e18);
-    1196                 :            : 
-    1197                 :            :         vm.expectEmit(true, true, true, false, address(FLA));
-    1198                 :            :         emit WithdrawStuckERC20(address(FLA), OWNER, 1e18);
-    1199                 :            :         FLA.withdrawStuckERC20(address(token));
-    1200                 :            :         assertEq(token.balanceOf(OWNER), 1e18);
-    1201                 :            :         assertEq(token.balanceOf(address(FLA)), 0);
-    1202                 :            : 
-    1203                 :            :         vm.expectRevert(FastLaneEvents.InequalityWrongToken.selector);
-    1204                 :            :         FLA.withdrawStuckERC20(address(wMatic));
-    1205                 :            :     }
-    1206                 :            : 
-    1207                 :            :     function testBidToken() public {
-    1208                 :            :         vm.startPrank(OWNER);
-    1209                 :            :         address badToken = address(0);
-    1210                 :            :         vm.expectRevert(FastLaneEvents.GeneralFailure.selector);
-    1211                 :            :         FLA.setBidToken(badToken);
-    1212                 :            :     }
-    1213                 :            : 
-    1214                 :            :     function testFeeUpdate() public {
-    1215                 :            :         vm.startPrank(OWNER);
-    1216                 :            :         uint24 abusiveFee = 1300000;
-    1217                 :            :         vm.expectRevert(FastLaneEvents.InequalityTooHigh.selector);
-    1218                 :            :         FLA.setFastlaneFee(abusiveFee);
-    1219                 :            : 
-    1220                 :            :         uint24 fee = 50000*2; // 10%
-    1221                 :            :         FLA.setFastlaneFee(fee);
-    1222                 :            : 
-    1223                 :            :         FLA.enableValidatorAddress(VALIDATOR1);
-    1224                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-    1225                 :            :         FLA.startAuction();
-    1226                 :            :         vm.stopPrank();
-    1227                 :            :         Bid memory auctionRightMinimumBidWithSearcher = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment());
-    1228                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,auctionRightMinimumBidWithSearcher);
-    1229                 :            : 
-    1230                 :            :         vm.startPrank(OWNER);
-    1231                 :            :         FLA.endAuction();
-    1232                 :            : 
-    1233                 :            :         // Check checkpoint and cuts
-    1234                 :            :         ValidatorBalanceCheckpoint memory vCheck = FLA.getCheckpoint(VALIDATOR1);
-    1235                 :            :         (uint256 vCut, uint256 pflCut) = _calculateCuts(auctionRightMinimumBidWithSearcher.bidAmount,FLA.fast_lane_fee());
-    1236                 :            : 
-    1237                 :            :         assertTrue(vCheck.pendingBalanceAtlastBid == vCut);
-    1238                 :            :         assertTrue(vCheck.outstandingBalance == 0);
-    1239                 :            :         assertTrue(vCheck.lastWithdrawnAuction == 0);
-    1240                 :            :         assertTrue(vCheck.lastBidReceivedAuction == 1);
-    1241                 :            : 
-    1242                 :            :         FLA.redeemOutstandingBalance(VALIDATOR1);
-    1243                 :            : 
-    1244                 :            :         vCheck = FLA.getCheckpoint(VALIDATOR1);
-    1245                 :            :         assertTrue(vCheck.pendingBalanceAtlastBid == 0);
-    1246                 :            :         assertTrue(vCheck.outstandingBalance == 0);
-    1247                 :            :         assertTrue(vCheck.lastWithdrawnAuction == 2);
-    1248                 :            :         assertTrue(vCheck.lastBidReceivedAuction == 1);
-    1249                 :            : 
-    1250                 :            :         assertTrue(wMatic.balanceOf(VALIDATOR1) == vCut);
-    1251                 :            :         assertTrue(wMatic.balanceOf(VALIDATOR1) == 9000000000000000000);
-    1252                 :            :         assertTrue(wMatic.balanceOf(OWNER) == 1000000000000000000);
-    1253                 :            :         assertTrue(wMatic.balanceOf(OWNER) == pflCut);
-    1254                 :            : 
-    1255                 :            :     }
-    1256                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/PFL_AuctionHandler.t.sol.func-sort-c.html b/report/test/PFL_AuctionHandler.t.sol.func-sort-c.html deleted file mode 100644 index 9baa75c..0000000 --- a/report/test/PFL_AuctionHandler.t.sol.func-sort-c.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - LCOV - lcov.info - test/PFL_AuctionHandler.t.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test - PFL_AuctionHandler.t.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:212584.0 %
Date:2023-09-07 01:01:29Functions:6875.0 %
Branches:3837.5 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
BrokenSearcherForgotFastLaneCallFn.0
BrokenUniswap.sickTrade0
BrokenSearcherForgotReturnBoolBytes.fastLaneCall1
BrokenSearcherRepayer.fastLaneCall1
BrokenSearcherRepayerPartial.fastLaneCall1
SearcherRepayerEvilEcho.fastLaneCall1
SearcherRepayerOverpayerDouble.fastLaneCall2
SearcherRepayerEcho.fastLaneCall3
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/PFL_AuctionHandler.t.sol.func.html b/report/test/PFL_AuctionHandler.t.sol.func.html deleted file mode 100644 index 4c48ead..0000000 --- a/report/test/PFL_AuctionHandler.t.sol.func.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - LCOV - lcov.info - test/PFL_AuctionHandler.t.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test - PFL_AuctionHandler.t.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:212584.0 %
Date:2023-09-07 01:01:29Functions:6875.0 %
Branches:3837.5 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
BrokenSearcherForgotFastLaneCallFn.0
BrokenSearcherForgotReturnBoolBytes.fastLaneCall1
BrokenSearcherRepayer.fastLaneCall1
BrokenSearcherRepayerPartial.fastLaneCall1
BrokenUniswap.sickTrade0
SearcherRepayerEcho.fastLaneCall3
SearcherRepayerEvilEcho.fastLaneCall1
SearcherRepayerOverpayerDouble.fastLaneCall2
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/PFL_AuctionHandler.t.sol.gcov.html b/report/test/PFL_AuctionHandler.t.sol.gcov.html deleted file mode 100644 index 86d8229..0000000 --- a/report/test/PFL_AuctionHandler.t.sol.gcov.html +++ /dev/null @@ -1,1020 +0,0 @@ - - - - - - - LCOV - lcov.info - test/PFL_AuctionHandler.t.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test - PFL_AuctionHandler.t.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:212584.0 %
Date:2023-09-07 01:01:29Functions:6875.0 %
Branches:3837.5 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : // SPDX-License-Identifier: UNLICENSED
-       2                 :            : pragma solidity ^0.8.16;
-       3                 :            : 
-       4                 :            : import "forge-std/Test.sol";
-       5                 :            : import "forge-std/console.sol";
-       6                 :            : import "forge-std/console2.sol";
-       7                 :            : 
-       8                 :            : import "contracts/legacy/FastLaneLegacyAuction.sol";
-       9                 :            : 
-      10                 :            : 
-      11                 :            : import "openzeppelin-contracts/contracts/utils/Strings.sol";
-      12                 :            : import "openzeppelin-contracts/contracts/utils/Address.sol";
-      13                 :            : import "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";
-      14                 :            : 
-      15                 :            : import "contracts/interfaces/IWMatic.sol";
-      16                 :            : 
-      17                 :            : import { MockERC20 } from "solmate/test/utils/mocks/MockERC20.sol";
-      18                 :            : 
-      19                 :            : import { PFLHelper } from "./legacy-test/PFLAuction.t.sol";
-      20                 :            : 
-      21                 :            : import "contracts/auction-handler/FastLaneAuctionHandler.sol";
-      22                 :            : 
-      23                 :            : import { SearcherContractExample } from "contracts/searcher-direct/FastLaneSearcherDirect.sol";
-      24                 :            : 
-      25                 :            : import { MockPaymentProcessor } from "./mocks/MockPaymentProcessor.sol";
-      26                 :            : 
-      27                 :            : 
-      28                 :            : contract PFLAuctionHandlerTest is PFLHelper, FastLaneAuctionHandlerEvents {
-      29                 :            : 
-      30                 :            :     // TODO consider moving addrs to PFLAuction or another helper
-      31                 :            :     address constant PAYEE1 = address(0x8881);
-      32                 :            :     address constant PAYEE2 = address(0x8882);
-      33                 :            : 
-      34                 :            :     // USER replaces OWNER since Auction is no longer ownable
-      35                 :            :     address constant USER = address(0x9090);
-      36                 :            :     address constant SEARCHER_OWNER = address(0x9091);
-      37                 :            : 
-      38                 :            :     FastLaneAuctionHandler PFR;
-      39                 :            :     BrokenUniswap brokenUniswap;
-      40                 :            :     address PFL_VAULT = OPS_ADDRESS;
-      41                 :            :     function setUp() public {
-      42                 :            :         // Give money
-      43                 :            :         for (uint256 i = 0; i < BIDDERS.length; i++) {
-      44                 :            :             address currentBidder = BIDDERS[i];
-      45                 :            :             address currentSearcher = SEARCHERS[i];
-      46                 :            :             uint256 soonWMaticBidder = (10 ether * (i + 1));
-      47                 :            :             uint256 soonWMaticSearcher = (33 ether * (i + 1));
-      48                 :            :             vm.label(currentBidder,string.concat("BIDDER",Strings.toString(i+1)));
-      49                 :            :             vm.label(currentSearcher,string.concat("SEARCHER",Strings.toString(i+1)));
-      50                 :            :             vm.deal(currentBidder, soonWMaticBidder + 1);
-      51                 :            :             vm.deal(currentSearcher, soonWMaticSearcher + 1);
-      52                 :            :         }
-      53                 :            : 
-      54                 :            :         uint24 stakeShare = 50_000;
-      55                 :            :         // Use PFL_VAULT as vault for repay checks
-      56                 :            :         PFR = new FastLaneAuctionHandler();
-      57                 :            :         brokenUniswap = new BrokenUniswap();
-      58                 :            : 
-      59                 :            :         vm.deal(address(brokenUniswap), 100 ether);
-      60                 :            :         vm.deal(USER, 100 ether);
-      61                 :            :         vm.coinbase(VALIDATOR1);
-      62                 :            :         vm.label(VALIDATOR1,"VALIDATOR1");
-      63                 :            :         vm.label(VALIDATOR2,"VALIDATOR2");
-      64                 :            :         vm.label(USER,"USER");
-      65                 :            :         console.log("Block Coinbase: %s",block.coinbase);
-      66                 :            :         vm.warp(1641070800);
-      67                 :            :     }
-      68                 :            : 
-      69                 :            :     function testSubmitFlashBid() public {
-      70                 :            : 
-      71                 :            :         vm.deal(SEARCHER_ADDRESS1, 150 ether);
-      72                 :            : 
-      73                 :            :         uint256 bidAmount = 0.001 ether;
-      74                 :            :         bytes32 oppTx = bytes32("tx1");
-      75                 :            : 
-      76                 :            :         // Deploy Searcher Wrapper as SEARCHER_ADDRESS1
-      77                 :            :         vm.startPrank(SEARCHER_ADDRESS1);
-      78                 :            :         SearcherContractExample SCE = new SearcherContractExample();
-      79                 :            :         SearcherRepayerOverpayerDouble SCEOverpay = new SearcherRepayerOverpayerDouble();
-      80                 :            :         vm.stopPrank();
-      81                 :            : 
-      82                 :            :         address to = address(SCE);
-      83                 :            : 
-      84                 :            :         address expectedAnAddress = vm.addr(12);
-      85                 :            :         uint256 expectedAnAmount = 1337;
-      86                 :            : 
-      87                 :            :         // Simply abi encode the args we want to forward to the searcher contract so it can execute them 
-      88                 :            :         bytes memory searcherCallData = abi.encodeWithSignature("doStuff(address,uint256)", expectedAnAddress, expectedAnAmount);
-      89                 :            : 
-      90                 :            :         console.log("Tx origin: %s", tx.origin);
-      91                 :            :         console.log("Address this: %s", address(this));
-      92                 :            :         console.log("Address PFR: %s", address(PFR));
-      93                 :            :         console.log("Owner SCE: %s", SCE.owner());
-      94                 :            : 
-      95                 :            :         vm.startPrank(SEARCHER_ADDRESS1,SEARCHER_ADDRESS1);
-      96                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelaySearcherWrongParams.selector);
-      97                 :            :         PFR.submitFlashBid(bidAmount, oppTx, address(0),  searcherCallData);
-      98                 :            : 
-      99                 :            :         bidAmount = 2 ether;
-     100                 :            : 
-     101                 :            :         SCE.setPFLAuctionAddress(address(0));
-     102                 :            :         vm.expectRevert(bytes("InvalidPermissions"));
-     103                 :            :         PFR.submitFlashBid(bidAmount, oppTx, to,  searcherCallData);
-     104                 :            :         // Authorize Relay as Searcher
-     105                 :            :         SCE.setPFLAuctionAddress(address(PFR));
-     106                 :            : 
-     107                 :            :         // Authorize test address as EOA
-     108                 :            :         SCE.approveFastLaneEOA(address(this));
-     109                 :            : 
-     110                 :            :         vm.expectRevert(bytes("SearcherInsufficientFunds  2000000000000000000 0"));
-     111                 :            :         PFR.submitFlashBid(bidAmount, oppTx, to,  searcherCallData);
-     112                 :            : 
-     113                 :            :         // Can oddly revert with "EvmError: OutOfFund".
-     114                 :            :         vm.expectRevert(bytes("SearcherInsufficientFunds  2000000000000000000 1000000000000000000"));
-     115                 :            :         console.log("Balance SCE: %s", to.balance);
-     116                 :            :         PFR.submitFlashBid{value: 1 ether}(bidAmount, oppTx, to,  searcherCallData);
-     117                 :            : 
-     118                 :            :         uint256 snap = vm.snapshot();
-     119                 :            : 
-     120                 :            :         vm.expectEmit(true, true, true, true);
-     121                 :            :         emit RelayFlashBid(SEARCHER_ADDRESS1, oppTx, VALIDATOR1, bidAmount, bidAmount, address(SCE));
-     122                 :            :         PFR.submitFlashBid{value: bidAmount}(bidAmount, oppTx, to, searcherCallData);
-     123                 :            : 
-     124                 :            :         // Check Balances
-     125                 :            :         console.log("Balance PFR: %s", address(PFR).balance);
-     126                 :            :         assertEq(bidAmount, address(PFR).balance);
-     127                 :            : 
-     128                 :            :         // Verify `doStuff` got hit
-     129                 :            :         assertEq(expectedAnAddress, SCE.anAddress());
-     130                 :            :         assertEq(expectedAnAmount, SCE.anAmount());
-     131                 :            : 
-     132                 :            :         // Replay attempt
-     133                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayAuctionBidReceivedLate.selector);
-     134                 :            :         PFR.submitFlashBid{value: 5 ether}(bidAmount, oppTx, to,  searcherCallData);
-     135                 :            : 
-     136                 :            :         // Not winner
-     137                 :            :         vm.expectRevert(abi.encodeWithSelector(FastLaneAuctionHandlerEvents.RelayAuctionSearcherNotWinner.selector, bidAmount - 1, bidAmount));
-     138                 :            :         PFR.submitFlashBid{value: 5 ether}(bidAmount - 1, oppTx, to,  searcherCallData);
-     139                 :            : 
-     140                 :            :         uint256 snap2 = vm.snapshot();
-     141                 :            : 
-     142                 :            :         vm.revertTo(snap);
-     143                 :            :         to = address(SCEOverpay);
-     144                 :            : 
-     145                 :            :         // Searcher overpays
-     146                 :            :         vm.expectEmit(true, true, true, true);
-     147                 :            :         emit RelayFlashBid(SEARCHER_ADDRESS1, oppTx, VALIDATOR1, 2.5 ether, 5 ether, address(SCEOverpay));
-     148                 :            :         PFR.submitFlashBid{value: 5 ether}(2.5 ether, oppTx, to,  searcherCallData);
-     149                 :            : 
-     150                 :            :         vm.revertTo(snap2);
-     151                 :            :         to = address(SCE);
-     152                 :            : 
-     153                 :            :         // Failed searcher call inside their contract
-     154                 :            :         bytes memory searcherFailCallData = abi.encodeWithSignature("doFail()");
-     155                 :            :         {
-     156                 :            :  
-     157                 :            :         vm.expectRevert("FAIL_ON_PURPOSE");
-     158                 :            :         PFR.submitFlashBid{value: 5 ether}(bidAmount - 1, bytes32("willfailtx"), to,  searcherFailCallData);
-     159                 :            : 
-     160                 :            :         }
-     161                 :            :     }
-     162                 :            : 
-     163                 :            :     function testSubmitFlashBidWithRefund() public {
-     164                 :            : 
-     165                 :            :         vm.deal(SEARCHER_ADDRESS1, 150 ether);
-     166                 :            : 
-     167                 :            :         uint256 bidAmount = 0.001 ether;
-     168                 :            :         bytes32 oppTx = bytes32("tx1");
-     169                 :            : 
-     170                 :            :         // Deploy Searcher Wrapper as SEARCHER_ADDRESS1 and enable the validator
-     171                 :            :         vm.startPrank(SEARCHER_ADDRESS1);
-     172                 :            :         SearcherContractExample SCE = new SearcherContractExample();
-     173                 :            :         SearcherRepayerOverpayerDouble SCEOverpay = new SearcherRepayerOverpayerDouble();
-     174                 :            :         PFR.payValidatorFee{value: 1}(SEARCHER_ADDRESS1);
-     175                 :            :         vm.deal(address(PFR), 0); // fixes a test later down the line that checks auction contract balance
-     176                 :            :         vm.stopPrank();
-     177                 :            : 
-     178                 :            :         // Set the refund up
-     179                 :            :         vm.startPrank(VALIDATOR1); // should fail if validator is changing their own block
-     180                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayImmutableBlockAuthorRate.selector);
-     181                 :            :         PFR.updateValidatorRefundShare(0);
-     182                 :            :         vm.coinbase(address(0));
-     183                 :            :         PFR.updateValidatorRefundShare(5000); // 50%
-     184                 :            :         vm.coinbase(VALIDATOR1);
-     185                 :            :         vm.stopPrank();
-     186                 :            : 
-     187                 :            :         address to = address(SCE);
-     188                 :            : 
-     189                 :            :         address expectedAnAddress = vm.addr(12);
-     190                 :            :         uint256 expectedAnAmount = 1337;
-     191                 :            : 
-     192                 :            :         // Simply abi encode the args we want to forward to the searcher contract so it can execute them 
-     193                 :            :         bytes memory searcherCallData = abi.encodeWithSignature("doStuff(address,uint256)", vm.addr(12), 1337);
-     194                 :            : 
-     195                 :            :         console.log("Tx origin: %s", tx.origin);
-     196                 :            :         console.log("Address this: %s", address(this));
-     197                 :            :         console.log("Address PFR: %s", address(PFR));
-     198                 :            :         console.log("Owner SCE: %s", SCE.owner());
-     199                 :            : 
-     200                 :            :         vm.startPrank(SEARCHER_ADDRESS1,SEARCHER_ADDRESS1);
-     201                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelaySearcherWrongParams.selector);
-     202                 :            :         PFR.submitFlashBidWithRefund(bidAmount, oppTx, REFUND_RECIPIENT, address(0), searcherCallData);
-     203                 :            : 
-     204                 :            :         bidAmount = 2 ether;
-     205                 :            : 
-     206                 :            :         SCE.setPFLAuctionAddress(address(0));
-     207                 :            :         vm.expectRevert(bytes("InvalidPermissions"));
-     208                 :            :         PFR.submitFlashBidWithRefund(bidAmount, oppTx, REFUND_RECIPIENT, to, searcherCallData);
-     209                 :            :         // Authorize Relay as Searcher
-     210                 :            :         SCE.setPFLAuctionAddress(address(PFR));
-     211                 :            : 
-     212                 :            :         // Authorize test address as EOA
-     213                 :            :         SCE.approveFastLaneEOA(address(this));
-     214                 :            : 
-     215                 :            :         vm.expectRevert(bytes("SearcherInsufficientFunds  2000000000000000000 0"));
-     216                 :            :         PFR.submitFlashBidWithRefund(bidAmount, oppTx, REFUND_RECIPIENT, to, searcherCallData);
-     217                 :            : 
-     218                 :            :         // Can oddly revert with "EvmError: OutOfFund".
-     219                 :            :         vm.expectRevert(bytes("SearcherInsufficientFunds  2000000000000000000 1000000000000000000"));
-     220                 :            :         console.log("Balance SCE: %s", to.balance);
-     221                 :            :         PFR.submitFlashBidWithRefund{value: 1 ether}(bidAmount, oppTx, REFUND_RECIPIENT, to, searcherCallData);
-     222                 :            :         
-     223                 :            :         uint256 snap = vm.snapshot();
-     224                 :            : 
-     225                 :            :         vm.expectEmit(true, true, true, true);
-     226                 :            :         emit RelayFlashBidWithRefund(SEARCHER_ADDRESS1, oppTx, VALIDATOR1, 2 ether, 2 ether, address(SCE), 1 ether, REFUND_RECIPIENT);
-     227                 :            :         PFR.submitFlashBidWithRefund{value: 5 ether}(2 ether, oppTx, REFUND_RECIPIENT, to, searcherCallData);
-     228                 :            : 
-     229                 :            :         // Check Balances
-     230                 :            :         console.log("Balance PFR: %s", address(PFR).balance);
-     231                 :            :         assertEq(bidAmount / 2, address(PFR).balance);
-     232                 :            : 
-     233                 :            :         console.log("Balance refund recipient: %s", REFUND_RECIPIENT.balance);
-     234                 :            :         assertEq(bidAmount / 2, REFUND_RECIPIENT.balance);
-     235                 :            : 
-     236                 :            :         // Verify `doStuff` got hit
-     237                 :            :         assertEq(expectedAnAddress, SCE.anAddress());
-     238                 :            :         assertEq(expectedAnAmount, SCE.anAmount());
-     239                 :            : 
-     240                 :            :         // Replay attempt
-     241                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayAuctionBidReceivedLate.selector);
-     242                 :            :         PFR.submitFlashBidWithRefund{value: 5 ether}(bidAmount, oppTx, REFUND_RECIPIENT, to, searcherCallData);
-     243                 :            : 
-     244                 :            :         // Not winner
-     245                 :            :         vm.expectRevert(abi.encodeWithSelector(FastLaneAuctionHandlerEvents.RelayAuctionSearcherNotWinner.selector, bidAmount - 1, bidAmount));
-     246                 :            :         PFR.submitFlashBidWithRefund{value: 5 ether}(bidAmount - 1, oppTx, REFUND_RECIPIENT, to, searcherCallData);
-     247                 :            : 
-     248                 :            :         uint256 snap2 = vm.snapshot();
-     249                 :            : 
-     250                 :            :         vm.revertTo(snap);
-     251                 :            :         to = address(SCEOverpay);
-     252                 :            : 
-     253                 :            :         // Searcher overpays
-     254                 :            :         vm.expectEmit(true, true, true, true);
-     255                 :            :         emit RelayFlashBidWithRefund(SEARCHER_ADDRESS1, oppTx, VALIDATOR1, 2.5 ether, 5 ether, address(SCEOverpay), 2.5 ether, REFUND_RECIPIENT);
-     256                 :            :         PFR.submitFlashBidWithRefund{value: 5 ether}(2.5 ether, oppTx, REFUND_RECIPIENT, to, searcherCallData);
-     257                 :            : 
-     258                 :            :         vm.revertTo(snap2);
-     259                 :            :         to = address(SCE);
-     260                 :            : 
-     261                 :            :         // Failed searcher call inside their contract
-     262                 :            :         bytes memory searcherFailCallData = abi.encodeWithSignature("doFail()"); 
-     263                 :            :         {
-     264                 :            :         vm.expectRevert("FAIL_ON_PURPOSE");
-     265                 :            :         PFR.submitFlashBid{value: 5 ether}(bidAmount - 1, bytes32("willfailtx"), to,  searcherFailCallData);
-     266                 :            :         }
-     267                 :            :     }
-     268                 :            : 
-     269                 :            :     function testCantExternalfastBidWrapper() public {
-     270                 :            :         vm.startPrank(SEARCHER_ADDRESS1);
-     271                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayMustBeSelf.selector);
-     272                 :            :         PFR.fastBidWrapper(address(0),0,address(0),bytes("willfail"));
-     273                 :            :     }
-     274                 :            : 
-     275                 :            :     function testSubmitFastBid() public {
-     276                 :            :         vm.deal(SEARCHER_ADDRESS1, 150 ether);
-     277                 :            :         vm.startPrank(SEARCHER_ADDRESS1);
-     278                 :            : 
-     279                 :            :         SearcherContractExample SCE = new SearcherContractExample();
-     280                 :            :         SearcherRepayerOverpayerDouble SCEOverpay = new SearcherRepayerOverpayerDouble();
-     281                 :            :         bytes memory searcherCallData = abi.encodeWithSignature("doStuff(address,uint256)", vm.addr(12), 1337);
-     282                 :            : 
-     283                 :            :         // Test all rejection cases first
-     284                 :            :         vm.txGasPrice(10 gwei);
-     285                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayAuctionInvalidBid.selector);
-     286                 :            :         PFR.submitFastBid(20 gwei, address(SCE), searcherCallData);
-     287                 :            : 
-     288                 :            :         // Then make a successful bid with medium payment
-     289                 :            : 
-     290                 :            :         // Make sure higher bids are rejected
-     291                 :            : 
-     292                 :            :         // And check if lower bids are accepted
-     293                 :            :     }
-     294                 :            : 
-     295                 :            :     function testWrongSearcherRepay() public {
-     296                 :            : 
-     297                 :            :         uint256 bidAmount = 2 ether;
-     298                 :            : 
-     299                 :            :         vm.startPrank(SEARCHER_ADDRESS1, SEARCHER_ADDRESS1);
-     300                 :            : 
-     301                 :            :         bytes memory searcherUnusedData = abi.encodeWithSignature("unused()");
-     302                 :            : 
-     303                 :            :         // Searcher BSFFLC contract forgot to implement fastLaneCall(uint256,address,bytes)
-     304                 :            :         BrokenSearcherForgotFastLaneCallFn BSFFLC = new BrokenSearcherForgotFastLaneCallFn();
-     305                 :            :         vm.expectRevert();
-     306                 :            :         PFR.submitFlashBid{value: 5 ether}(bidAmount, bytes32("randomTx"), address(BSFFLC),  searcherUnusedData);
-     307                 :            : 
-     308                 :            :         // Searcher BSFFLC contract implemented `fastLaneCall` but forgot to return (bool, bytes);
-     309                 :            :         BrokenSearcherForgotReturnBoolBytes BSFRBB = new BrokenSearcherForgotReturnBoolBytes();
-     310                 :            :         vm.expectRevert();
-     311                 :            :         PFR.submitFlashBid{value: 5 ether}(bidAmount, bytes32("randomTx"), address(BSFRBB),  searcherUnusedData);
-     312                 :            : 
-     313                 :            : 
-     314                 :            :         // Searcher implemented but doesn't manage to repay the relay
-     315                 :            :         BrokenSearcherRepayer BRP = new BrokenSearcherRepayer();
-     316                 :            :         vm.expectRevert(abi.encodeWithSelector(FastLaneAuctionHandlerEvents.RelayNotRepaid.selector, bidAmount, 0));
-     317                 :            :         PFR.submitFlashBid{value: 5 ether}(bidAmount, bytes32("randomTx"), address(BRP),  searcherUnusedData);
-     318                 :            : 
-     319                 :            :         // Searcher implemented but doesn't manage to repay the relay in full
-     320                 :            :         BrokenSearcherRepayerPartial BRPP = new BrokenSearcherRepayerPartial();
-     321                 :            :         vm.deal(address(BRPP), 10 ether);
-     322                 :            :         vm.expectRevert(abi.encodeWithSelector(FastLaneAuctionHandlerEvents.RelayNotRepaid.selector, bidAmount, 1 ether));
-     323                 :            :         PFR.submitFlashBid{value: 5 ether}(bidAmount, bytes32("randomTx"), address(BRPP),  searcherUnusedData);
-     324                 :            :         
-     325                 :            :     }
-     326                 :            : 
-     327                 :            :     function testSimulateFlashBid() public {
-     328                 :            :         vm.startPrank(SEARCHER_ADDRESS1,SEARCHER_ADDRESS1);
-     329                 :            :         SearcherRepayerEcho SRE = new SearcherRepayerEcho();
-     330                 :            : 
-     331                 :            :         uint256 bidAmount = 0.00002 ether;
-     332                 :            :         bytes32 oppTx = bytes32("fakeTx1");
-     333                 :            :         bytes memory searcherUnusedData = abi.encodeWithSignature("unused()");
-     334                 :            : 
-     335                 :            :         vm.expectEmit(true, true, true, true);
-     336                 :            :         emit RelaySimulatedFlashBid(SEARCHER_ADDRESS1, bidAmount, oppTx, block.coinbase, address(SRE));
-     337                 :            :         PFR.simulateFlashBid{value: 5 ether}(bidAmount, oppTx, address(SRE),  searcherUnusedData);
-     338                 :            :         vm.stopPrank();
-     339                 :            : 
-     340                 :            :         vm.prank(SEARCHER_ADDRESS1,SEARCHER_ADDRESS1);
-     341                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelaySearcherWrongParams.selector);
-     342                 :            :         PFR.simulateFlashBid{value: 5 ether}(bidAmount, oppTx, address(0),  searcherUnusedData);
-     343                 :            :     }
-     344                 :            : 
-     345                 :            :     function testCollectReentrantFail() public {
-     346                 :            :         vm.deal(SEARCHER_ADDRESS1, 100 ether);
-     347                 :            : 
-     348                 :            :         uint256 bidAmount = 2 ether;
-     349                 :            :         uint256 expectedValidatorPayout = bidAmount - 1;
-     350                 :            :         bytes32 oppTx = bytes32("tx1");
-     351                 :            :         bytes memory searcherUnusedData = abi.encodeWithSignature("unused()");
-     352                 :            : 
-     353                 :            :         SearcherRepayerEvilEcho SRE = new SearcherRepayerEvilEcho();
-     354                 :            : 
-     355                 :            :         vm.prank(SEARCHER_ADDRESS1, SEARCHER_ADDRESS1);
-     356                 :            :         vm.expectRevert();
-     357                 :            :         PFR.submitFlashBid{value: bidAmount}(bidAmount, bytes32("randomTx"), address(SRE),  searcherUnusedData);
-     358                 :            :     }
-     359                 :            : 
-     360                 :            :     function testCollectFees() public {
-     361                 :            :         vm.deal(SEARCHER_ADDRESS1, 100 ether);
-     362                 :            : 
-     363                 :            :         uint256 bidAmount = 2 ether;
-     364                 :            :         uint256 expectedValidatorPayout = bidAmount - 1;
-     365                 :            :         bytes32 oppTx = bytes32("tx1");
-     366                 :            :         bytes memory searcherUnusedData = abi.encodeWithSignature("unused()");
-     367                 :            : 
-     368                 :            :         SearcherRepayerEcho SRE = new SearcherRepayerEcho();
-     369                 :            : 
-     370                 :            :         vm.prank(SEARCHER_ADDRESS1, SEARCHER_ADDRESS1);
-     371                 :            :         PFR.submitFlashBid{value: bidAmount}(bidAmount, bytes32("randomTx"), address(SRE),  searcherUnusedData);
-     372                 :            : 
-     373                 :            :         uint256 snap = vm.snapshot();
-     374                 :            : 
-     375                 :            :         // As V1 pay itself
-     376                 :            :         uint256 balanceBefore = VALIDATOR1.balance;
-     377                 :            :         vm.expectEmit(true, true, true, true);
-     378                 :            :         emit RelayProcessingPaidValidator(VALIDATOR1, expectedValidatorPayout, VALIDATOR1);
-     379                 :            : 
-     380                 :            :         vm.prank(VALIDATOR1);
-     381                 :            :         uint256 returnedAmountPaid = PFR.collectFees();
-     382                 :            :         uint256 actualAmountPaid = VALIDATOR1.balance - balanceBefore;
-     383                 :            : 
-     384                 :            :         // Validator actually got paid as expected
-     385                 :            :         assertEq(returnedAmountPaid, expectedValidatorPayout);
-     386                 :            :         assertEq(actualAmountPaid, expectedValidatorPayout);
-     387                 :            :         assertEq(1, PFR.validatorsTotal()); // 1 left in validator balance for gas costs
-     388                 :            : 
-     389                 :            :         // Again
-     390                 :            :         vm.prank(VALIDATOR1);
-     391                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayCannotBeZero.selector);
-     392                 :            :         PFR.collectFees();
-     393                 :            : 
-     394                 :            :         // Back to pre-payment. VALIDATOR1 has (2 ETH - 1) matic to withdraw.
-     395                 :            :         vm.revertTo(snap);
-     396                 :            :         snap = vm.snapshot();
-     397                 :            :         // As payee try to pay V1. Assume SEARCHER 4 is V1 payee but not yet set
-     398                 :            :         vm.startPrank(SEARCHER_ADDRESS4);
-     399                 :            :         address payee = PFR.getValidatorPayee(VALIDATOR1);
-     400                 :            :         assertEq(payee,address(0));
-     401                 :            :         bool valid = PFR.isValidPayee(VALIDATOR1, SEARCHER_ADDRESS4);
-     402                 :            :         assertEq(valid, false);
-     403                 :            :         bool isTimelocked = PFR.isPayeeTimeLocked(VALIDATOR1);
-     404                 :            :         assertEq(isTimelocked, false);
-     405                 :            :         vm.stopPrank();
-     406                 :            : 
-     407                 :            :         // Now set V1 payee to Searcher 4 properly
-     408                 :            :         vm.prank(VALIDATOR1);
-     409                 :            :         PFR.updateValidatorPayee(SEARCHER_ADDRESS4);
-     410                 :            :         assertEq(PFR.getValidatorPayee(VALIDATOR1), SEARCHER_ADDRESS4);
-     411                 :            : 
-     412                 :            :         isTimelocked = PFR.isPayeeTimeLocked(VALIDATOR1);
-     413                 :            :         assertEq(isTimelocked, true);
-     414                 :            : 
-     415                 :            :         // Payee fails because still timelocked 
-     416                 :            :         vm.prank(SEARCHER_ADDRESS4);
-     417                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayPayeeIsTimelocked.selector);
-     418                 :            :         PFR.collectFees();
-     419                 :            : 
-     420                 :            :         // Fast forward
-     421                 :            :         vm.warp(block.timestamp + 7 days);
-     422                 :            : 
-     423                 :            :         // Payee succeeds after time delay
-     424                 :            :         vm.expectEmit(true, true, true, true);
-     425                 :            :         emit RelayProcessingPaidValidator(VALIDATOR1, expectedValidatorPayout, SEARCHER_ADDRESS4);
-     426                 :            :         vm.prank(SEARCHER_ADDRESS4);
-     427                 :            :         PFR.collectFees();
-     428                 :            : 
-     429                 :            :         // Back to pre-payment. VALIDATOR1 has (2 ETH - 1) matic to withdraw.
-     430                 :            :         vm.revertTo(snap);
-     431                 :            :         snap = vm.snapshot();
-     432                 :            : 
-     433                 :            :         // Legit update
-     434                 :            :         vm.prank(VALIDATOR1);
-     435                 :            :         vm.expectEmit(true, true, true, true);
-     436                 :            :         emit RelayValidatorPayeeUpdated(VALIDATOR1, SEARCHER_ADDRESS2, VALIDATOR1);
-     437                 :            :         PFR.updateValidatorPayee(SEARCHER_ADDRESS2);
-     438                 :            : 
-     439                 :            :         // Now SEARCHER_2 must wait to be able to use his new payee status
-     440                 :            :         // Old payee invalid
-     441                 :            :         valid = PFR.isValidPayee(VALIDATOR1, SEARCHER_ADDRESS4);
-     442                 :            :         assertEq(valid, false);
-     443                 :            : 
-     444                 :            :         isTimelocked = PFR.isPayeeTimeLocked(VALIDATOR1);
-     445                 :            :         assertEq(isTimelocked, true);
-     446                 :            : 
-     447                 :            :         vm.startPrank(SEARCHER_ADDRESS2);
-     448                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayPayeeIsTimelocked.selector);
-     449                 :            :         PFR.collectFees();
-     450                 :            : 
-     451                 :            :         // Fast forward
-     452                 :            :         vm.warp(block.timestamp + 7 days);
-     453                 :            : 
-     454                 :            :         vm.expectEmit(true, true, true, true);
-     455                 :            :         emit RelayProcessingPaidValidator(VALIDATOR1, expectedValidatorPayout, SEARCHER_ADDRESS2);
-     456                 :            :         PFR.collectFees();
-     457                 :            :     }
-     458                 :            : 
-     459                 :            :     function testUpdateValidatorPayeeRevertsIfAddressZero() public {
-     460                 :            :         _donateOneWeiToValidatorBalance();
-     461                 :            :         vm.prank(VALIDATOR1);
-     462                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayCannotBeZero.selector);
-     463                 :            :         PFR.updateValidatorPayee(address(0));
-     464                 :            :     }
-     465                 :            : 
-     466                 :            :     function testUpdateValidatorPayeeRevertsIfAuctionAddress() public {
-     467                 :            :         _donateOneWeiToValidatorBalance();
-     468                 :            :         vm.prank(VALIDATOR1);
-     469                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayCannotBeSelf.selector);
-     470                 :            :         PFR.updateValidatorPayee(address(PFR));
-     471                 :            :     }
-     472                 :            : 
-     473                 :            :     function testUpdateValidatorPayeeRevertsIfValidatorOrNewPayeeInPayeeMap() public {
-     474                 :            :         _donateOneWeiToValidatorBalance();
-     475                 :            :         vm.coinbase(VALIDATOR2);
-     476                 :            :         _donateOneWeiToValidatorBalance();
-     477                 :            :         vm.coinbase(VALIDATOR1);
-     478                 :            : 
-     479                 :            :         vm.label(PAYEE1,"PAYEE1");
-     480                 :            :         vm.label(PAYEE2,"PAYEE2");
-     481                 :            : 
-     482                 :            :         vm.prank(VALIDATOR1);
-     483                 :            :         PFR.updateValidatorPayee(PAYEE1);
-     484                 :            :         vm.warp(block.timestamp + 7 days);
-     485                 :            :         assertEq(PFR.getValidatorRecipient(VALIDATOR1), PAYEE1);
-     486                 :            : 
-     487                 :            :         vm.prank(PAYEE1);
-     488                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayPayeeUpdateInvalid.selector);
-     489                 :            :         PFR.updateValidatorPayee(PAYEE1);
-     490                 :            :         
-     491                 :            :         vm.prank(VALIDATOR1);
-     492                 :            :         PFR.updateValidatorPayee(PAYEE2);
-     493                 :            :         vm.warp(block.timestamp + 7 days);
-     494                 :            :         assertEq(PFR.getValidatorRecipient(VALIDATOR1), PAYEE2);
-     495                 :            : 
-     496                 :            :         vm.prank(PAYEE2);
-     497                 :            :         PFR.updateValidatorPayee(PAYEE1);
-     498                 :            :         vm.warp(block.timestamp + 7 days);
-     499                 :            :         assertEq(PFR.getValidatorRecipient(VALIDATOR1), PAYEE1);
-     500                 :            : 
-     501                 :            :         // Cant relinquish back to own validator
-     502                 :            :         vm.prank(PAYEE1);
-     503                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayPayeeUpdateInvalid.selector);
-     504                 :            :         PFR.updateValidatorPayee(VALIDATOR1);
-     505                 :            : 
-     506                 :            :        
-     507                 :            :         // Cant relinquish back to any validator in use
-     508                 :            :         vm.prank(PAYEE1);
-     509                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayPayeeUpdateInvalid.selector);
-     510                 :            :         PFR.updateValidatorPayee(VALIDATOR2);
-     511                 :            :    
-     512                 :            : 
-     513                 :            :         // Ensure it's not stuck
-     514                 :            :         vm.prank(VALIDATOR1);
-     515                 :            :         PFR.updateValidatorPayee(PAYEE2);
-     516                 :            :         vm.warp(block.timestamp + 7 days);
-     517                 :            :         assertEq(PFR.getValidatorRecipient(VALIDATOR1), PAYEE2);
-     518                 :            : 
-     519                 :            :         vm.prank(PAYEE2);
-     520                 :            :         PFR.updateValidatorPayee(PAYEE1);
-     521                 :            :         vm.warp(block.timestamp + 7 days);
-     522                 :            :         assertEq(PFR.getValidatorRecipient(VALIDATOR1), PAYEE1);
-     523                 :            : 
-     524                 :            :     }
-     525                 :            : 
-     526                 :            :     function testClearPayeeAndHostilePayeeUpdate() public {
-     527                 :            : 
-     528                 :            :         _donateOneWeiToValidatorBalance();
-     529                 :            :         _donateOneWeiToValidatorBalance();
-     530                 :            :         vm.coinbase(VALIDATOR1);
-     531                 :            : 
-     532                 :            :         vm.label(PAYEE1,"PAYEE1");
-     533                 :            :         vm.label(PAYEE2,"PAYEE2");
-     534                 :            : 
-     535                 :            :      
-     536                 :            :         vm.prank(VALIDATOR1);
-     537                 :            :         PFR.updateValidatorPayee(PAYEE1);
-     538                 :            :         vm.warp(block.timestamp + 7 days);
-     539                 :            :         assertEq(PFR.getValidatorRecipient(VALIDATOR1), PAYEE1);
-     540                 :            : 
-     541                 :            :         uint snap = vm.snapshot();
-     542                 :            : 
-     543                 :            :         // Validator can clear and old Payee can't act anymore.
-     544                 :            : 
-     545                 :            :         vm.prank(VALIDATOR1);
-     546                 :            :         PFR.clearValidatorPayee();
-     547                 :            : 
-     548                 :            :         assertEq(PFR.getValidatorRecipient(VALIDATOR1), VALIDATOR1);
-     549                 :            : 
-     550                 :            :         vm.prank(PAYEE1);
-     551                 :            :         vm.expectRevert();
-     552                 :            :         PFR.collectFees();
-     553                 :            : 
-     554                 :            :         vm.prank(PAYEE1);
-     555                 :            :         vm.expectRevert();
-     556                 :            :         PFR.updateValidatorPayee(PAYEE2);
-     557                 :            :         
-     558                 :            :         vm.revertTo(snap);
-     559                 :            : 
-     560                 :            :         // Payee cant clear himself
-     561                 :            :         vm.prank(PAYEE1);
-     562                 :            :         vm.expectRevert();
-     563                 :            :         PFR.clearValidatorPayee();
-     564                 :            : 
-     565                 :            :         vm.prank(VALIDATOR1);
-     566                 :            :         PFR.clearValidatorPayee();
-     567                 :            : 
-     568                 :            :         // Validator can then assign anyone it sees fit
-     569                 :            :         vm.prank(VALIDATOR1);
-     570                 :            :         PFR.updateValidatorPayee(PAYEE1);
-     571                 :            : 
-     572                 :            :         // Validator trolls by assigning an upcoming but never seen yet
-     573                 :            :         // validator address as payee.
-     574                 :            :         // Locking its payeeMap : payeeMap[validator2] = validator1
-     575                 :            :         // formerPayee of v1 will be v2 
-     576                 :            : 
-     577                 :            :         vm.prank(VALIDATOR1);
-     578                 :            : 
-     579                 :            :         // Things start getting weird
-     580                 :            :         PFR.updateValidatorPayee(VALIDATOR2); // V1 Time locks Validator2
-     581                 :            : 
-     582                 :            :         vm.warp(block.timestamp + 7 days);
-     583                 :            : 
-     584                 :            : 
-     585                 :            :         vm.coinbase(VALIDATOR2);
-     586                 :            :         _donateOneWeiToValidatorBalance();
-     587                 :            :         _donateOneWeiToValidatorBalance();
-     588                 :            : 
-     589                 :            :         vm.prank(VALIDATOR2);
-     590                 :            :         PFR.updateValidatorPayee(PAYEE2); // Actually updates VALIDATOR1, since PAYEE
-     591                 :            :         // So VALIDATOR2 payee is unchanged
-     592                 :            :         assertEq(PFR.getValidatorRecipient(VALIDATOR2), VALIDATOR2);
-     593                 :            : 
-     594                 :            :         vm.warp(block.timestamp + 7 days);
-     595                 :            : 
-     596                 :            :         // And then gets unlocked after 7d
-     597                 :            :         assertEq(PFR.getValidatorRecipient(VALIDATOR2), PAYEE2);
-     598                 :            : 
-     599                 :            : 
-     600                 :            :         vm.prank(VALIDATOR1);
-     601                 :            :         PFR.updateValidatorPayee(PAYEE1);
-     602                 :            :         vm.warp(block.timestamp + 7 days);
-     603                 :            :         // To get things back 
-     604                 :            :         vm.prank(VALIDATOR2);
-     605                 :            :         PFR.clearValidatorPayee();
-     606                 :            : 
-     607                 :            :         vm.prank(VALIDATOR2);
-     608                 :            :         PFR.updateValidatorPayee(PAYEE2);
-     609                 :            :         vm.warp(block.timestamp + 7 days);
-     610                 :            :         assertEq(PFR.getValidatorRecipient(VALIDATOR2), PAYEE2);
-     611                 :            : 
-     612                 :            :     }
-     613                 :            : 
-     614                 :            : 
-     615                 :            :     // NOTE: This is unreachable because getValidator is internal and 
-     616                 :            :     //          only called when checks blocking this revert case have been passed
-     617                 :            :     // function testGetValidatorRevertsIfInvalidCaller() public {
-     618                 :            :     //     vm.startPrank(address(this));
-     619                 :            :     //     vm.expectRevert("Invalid validator");
-     620                 :            :     //     PFR.getValidator();
-     621                 :            :     // }
-     622                 :            : 
-     623                 :            :     function testPayValidatorFeeRevertsWithZeroValue() public {
-     624                 :            :         vm.prank(USER);
-     625                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayValueIsZero.selector);
-     626                 :            :         PFR.payValidatorFee{value: 0}(SEARCHER_ADDRESS1);
-     627                 :            :     }
-     628                 :            : 
-     629                 :            :     function testValidatorCanSetPayee() public {
-     630                 :            :         assertTrue(PFR.getValidatorPayee(VALIDATOR1) != PAYEE1);
-     631                 :            :         // Prep validator balance in contract - must be positive to change payee
-     632                 :            :         _donateOneWeiToValidatorBalance();
-     633                 :            : 
-     634                 :            :         vm.prank(VALIDATOR1);
-     635                 :            :         PFR.updateValidatorPayee(PAYEE1);
-     636                 :            :         assertEq(PFR.getValidatorPayee(VALIDATOR1), PAYEE1);
-     637                 :            :     }
-     638                 :            : 
-     639                 :            :     function testValidatorsPayeeCanSetPayee() public {
-     640                 :            :         // Prep validator balance in contract - must be positive to change payee
-     641                 :            :         _donateOneWeiToValidatorBalance();
-     642                 :            : 
-     643                 :            :         vm.prank(VALIDATOR1);
-     644                 :            :         PFR.updateValidatorPayee(PAYEE1);
-     645                 :            :         assertEq(PFR.getValidatorPayee(VALIDATOR1), PAYEE1);
-     646                 :            : 
-     647                 :            :         // avoid payee is time locked revert
-     648                 :            :         vm.warp(block.timestamp + 6 days + 1);
-     649                 :            : 
-     650                 :            :         vm.prank(PAYEE1);
-     651                 :            :         PFR.updateValidatorPayee(PAYEE2);
-     652                 :            :         assertEq(PFR.getValidatorPayee(VALIDATOR1), PAYEE2);
-     653                 :            :     }
-     654                 :            : 
-     655                 :            :     function testRandomUserCannotSetValidatorsPayee() public {        
-     656                 :            :         vm.prank(USER);
-     657                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayInvalidSender.selector); // reverts in validPayee modifier
-     658                 :            :         PFR.updateValidatorPayee(USER);
-     659                 :            :     }
-     660                 :            : 
-     661                 :            :     function testValidatorCannotSetPayeeIfZeroBalance() public {
-     662                 :            :         assertTrue(PFR.getValidatorBalance(VALIDATOR1) == 0);
-     663                 :            :         vm.prank(VALIDATOR1);
-     664                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayInvalidSender.selector);
-     665                 :            :         PFR.updateValidatorPayee(PAYEE1);
-     666                 :            :     }
-     667                 :            : 
-     668                 :            :     function testPayeeCannotSetPayeeIfBeforeTimelock() public {
-     669                 :            :         // Prep validator balance in contract - must be positive to change payee
-     670                 :            :         _donateOneWeiToValidatorBalance();
-     671                 :            : 
-     672                 :            :         vm.prank(VALIDATOR1);
-     673                 :            :         PFR.updateValidatorPayee(PAYEE1);
-     674                 :            :         assertEq(PFR.getValidatorPayee(VALIDATOR1), PAYEE1);
-     675                 :            : 
-     676                 :            :         vm.prank(PAYEE1);
-     677                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayPayeeIsTimelocked.selector);
-     678                 :            :         PFR.updateValidatorPayee(PAYEE2);
-     679                 :            :         assertEq(PFR.getValidatorPayee(VALIDATOR1), PAYEE1);
-     680                 :            :     }
-     681                 :            : 
-     682                 :            :     function testSyncNativeTokenCanOnlyBeCalledByValidators() public {
-     683                 :            :         _donateOneWeiToValidatorBalance();
-     684                 :            :         uint256 stuckNativeAmount = 1 ether;
-     685                 :            :         vm.prank(USER);
-     686                 :            :         address(PFR).call{value: stuckNativeAmount}("");
-     687                 :            : 
-     688                 :            :         vm.prank(USER);
-     689                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayNotActiveValidator.selector);
-     690                 :            :         PFR.syncStuckNativeToken();
-     691                 :            : 
-     692                 :            :         uint256 validatorBalanceBefore = PFR.getValidatorBalance(VALIDATOR1);
-     693                 :            :         vm.prank(VALIDATOR1);
-     694                 :            :         PFR.syncStuckNativeToken();
-     695                 :            :         uint256 validatorBalanceAfter = PFR.getValidatorBalance(VALIDATOR1);
-     696                 :            :         assertEq(validatorBalanceAfter - validatorBalanceBefore, stuckNativeAmount);
-     697                 :            :     }
-     698                 :            : 
-     699                 :            :     function testSyncNativeTokenDoesNotIncreaseBalanceIfNoExcess() public {
-     700                 :            :         _donateOneWeiToValidatorBalance();
-     701                 :            :         uint256 auctionContractBalanceBefore = address(PFR).balance;
-     702                 :            :         uint256 validatorBalanceBefore = PFR.getValidatorBalance(VALIDATOR1);
-     703                 :            :         vm.prank(VALIDATOR1);
-     704                 :            :         PFR.syncStuckNativeToken();
-     705                 :            :         uint256 auctionContractBalanceAfter = address(PFR).balance;
-     706                 :            :         uint256 validatorBalanceAfter = PFR.getValidatorBalance(VALIDATOR1);
-     707                 :            :         assertEq(validatorBalanceBefore, validatorBalanceAfter);
-     708                 :            :         assertEq(auctionContractBalanceBefore, auctionContractBalanceAfter);
-     709                 :            :     }
-     710                 :            : 
-     711                 :            :     function testWithdrawStuckERC20CanOnlyBeCalledByValidators() public {
-     712                 :            :         _donateOneWeiToValidatorBalance();
-     713                 :            :         uint256 stuckERC20Amount = 1 ether;
-     714                 :            :         MockERC20 mockToken = new MockERC20("MockToken", "MT", 18);
-     715                 :            :         mockToken.mint(USER, stuckERC20Amount);
-     716                 :            :         vm.prank(USER);
-     717                 :            :         mockToken.transfer(address(PFR), stuckERC20Amount);
-     718                 :            : 
-     719                 :            :         vm.prank(USER);
-     720                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayNotActiveValidator.selector);
-     721                 :            :         PFR.withdrawStuckERC20(address(mockToken));
-     722                 :            : 
-     723                 :            :         uint256 validatorBalanceBefore = mockToken.balanceOf(address(VALIDATOR1));
-     724                 :            :         vm.prank(VALIDATOR1);
-     725                 :            :         PFR.withdrawStuckERC20(address(mockToken));
-     726                 :            :         uint256 validatorBalanceAfter = mockToken.balanceOf(address(VALIDATOR1));
-     727                 :            :         assertEq(validatorBalanceAfter - validatorBalanceBefore, stuckERC20Amount);
-     728                 :            :     }
-     729                 :            : 
-     730                 :            :     function testWithdrawStuckERC20DoesNotIncreaseBalanceIfNoExcess() public {
-     731                 :            :         _donateOneWeiToValidatorBalance();
-     732                 :            :         uint256 stuckERC20Amount = 1 ether;
-     733                 :            :         MockERC20 mockToken = new MockERC20("MockToken", "MT", 18);
-     734                 :            :         mockToken.mint(USER, stuckERC20Amount);
-     735                 :            :         uint256 auctionContractBalanceBefore = mockToken.balanceOf(address(PFR));
-     736                 :            :         uint256 validatorBalanceBefore = mockToken.balanceOf(address(VALIDATOR1));
-     737                 :            :         vm.prank(VALIDATOR1);
-     738                 :            :         PFR.withdrawStuckERC20(address(mockToken));
-     739                 :            :         uint256 auctionContractBalanceAfter = mockToken.balanceOf(address(PFR));
-     740                 :            :         uint256 validatorBalanceAfter = mockToken.balanceOf(address(VALIDATOR1));
-     741                 :            :         assertEq(validatorBalanceBefore, validatorBalanceAfter);
-     742                 :            :         assertEq(auctionContractBalanceBefore, auctionContractBalanceAfter);
-     743                 :            :     }
-     744                 :            : 
-     745                 :            :     function testGetValidatorRecipient() public {
-     746                 :            :         _donateOneWeiToValidatorBalance();
-     747                 :            :         // Returns validator if valid and no payee set
-     748                 :            :         assertEq(PFR.getValidatorRecipient(VALIDATOR1), VALIDATOR1);
-     749                 :            : 
-     750                 :            :         // Returns payee if valid and payee set
-     751                 :            :         vm.prank(VALIDATOR1);
-     752                 :            :         PFR.updateValidatorPayee(PAYEE1);
-     753                 :            :         vm.warp(block.timestamp + 7 days);
-     754                 :            :         assertEq(PFR.getValidatorRecipient(VALIDATOR1), PAYEE1);
-     755                 :            :     }
-     756                 :            : 
-     757                 :            : 
-     758                 :            :     function testGetValidatorBlockOfLastWithdraw() public {
-     759                 :            :         // Setup for collectFees testing
-     760                 :            :         vm.deal(SEARCHER_ADDRESS1, 100 ether);
-     761                 :            :         uint256 bidAmount = 2 ether;
-     762                 :            :         uint256 expectedValidatorPayout = bidAmount - 1;
-     763                 :            :         bytes32 oppTx = bytes32("tx1");
-     764                 :            :         bytes memory searcherUnusedData = abi.encodeWithSignature("unused()");
-     765                 :            :         SearcherRepayerEcho SRE = new SearcherRepayerEcho();
-     766                 :            :         vm.prank(SEARCHER_ADDRESS1, SEARCHER_ADDRESS1);
-     767                 :            :         PFR.submitFlashBid{value: bidAmount}(bidAmount, bytes32("randomTx"), address(SRE),  searcherUnusedData);
-     768                 :            : 
-     769                 :            :         // Returns 0 if no withdraws
-     770                 :            :         assertEq(PFR.getValidatorBlockOfLastWithdraw(VALIDATOR1), 0);
-     771                 :            : 
-     772                 :            :         // Returns block number of last withdraw
-     773                 :            :         vm.prank(VALIDATOR1);
-     774                 :            :         PFR.collectFees();
-     775                 :            :         assertEq(PFR.getValidatorBlockOfLastWithdraw(VALIDATOR1), block.number);
-     776                 :            :     }
-     777                 :            : 
-     778                 :            :     // TODO handle uninitiatied validators not with startBlock == 0
-     779                 :            :     function testPayValidatorCustom() public {
-     780                 :            :         // Seed validator with ETH and in auction contract
-     781                 :            :         vm.deal(VALIDATOR1, 1 ether);
-     782                 :            :         _donateOneWeiToValidatorBalance();
-     783                 :            : 
-     784                 :            :         MockPaymentProcessor MPP = new MockPaymentProcessor();
-     785                 :            :         uint256 msgValue = 1 ether;
-     786                 :            :         uint256 customAllocation = 1e16; // 1% of 1e18
-     787                 :            :         bytes memory addressData = abi.encode(VALIDATOR1);
-     788                 :            : 
-     789                 :            :         // Reverts if payment processor address is zero address
-     790                 :            :         vm.prank(VALIDATOR1);
-     791                 :            :         vm.expectRevert(FastLaneAuctionHandlerEvents.RelayProcessorCannotBeZero.selector);
-     792                 :            :         PFR.payValidatorCustom{value: msgValue}(address(0), customAllocation, addressData);
-     793                 :            : 
-     794                 :            :         assertEq(address(MPP).balance, 0); // No ETH in PaymentProcessor before
-     795                 :            : 
-     796                 :            :         vm.prank(VALIDATOR1);
-     797                 :            :         vm.expectEmit(true, true, false, true, address(PFR));
-     798                 :            :         emit CustomPaymentProcessorPaid({
-     799                 :            :             payor: VALIDATOR1,
-     800                 :            :             paymentProcessor: address(MPP),
-     801                 :            :             totalAmount: msgValue,
-     802                 :            :             customAllocation: customAllocation, 
-     803                 :            :             startBlock: 0,
-     804                 :            :             endBlock: block.number
-     805                 :            :         });
-     806                 :            :         PFR.payValidatorCustom{value: msgValue}(address(MPP), customAllocation, addressData);
-     807                 :            : 
-     808                 :            :         assertEq(MPP.validator(), VALIDATOR1);
-     809                 :            :         assertEq(MPP.totalAmount(), msgValue);
-     810                 :            :         assertEq(MPP.customAllocation(), customAllocation);
-     811                 :            :         assertEq(MPP.startBlock(), 0);
-     812                 :            :         assertEq(MPP.endBlock(), block.number);
-     813                 :            :         assertEq(address(MPP).balance, msgValue); // ETH in PaymentProcessor after
-     814                 :            :     }
-     815                 :            : 
-     816                 :            : 
-     817                 :            :     // Useful to get past the "validatorsBalanceMap[validator] > 0" checks
-     818                 :            :     function _donateOneWeiToValidatorBalance() internal {
-     819                 :            :         vm.prank(USER);
-     820                 :            :         PFR.payValidatorFee{value: 1}(USER);
-     821                 :            :     }
-     822                 :            : }
-     823                 :            : 
-     824                 :            : // Fake opportunity to backrun
-     825                 :            : contract BrokenUniswap {
-     826                 :            :     function sickTrade(uint256 unused) external {
-     827                 :          0 :         payable(msg.sender).transfer(address(this).balance / 2);
-     828                 :            :     }
-     829                 :            : }
-     830                 :            : 
-     831                 :            : // Purpose is to do nothing, hence not repaying the relay
-     832                 :            : contract BrokenSearcherForgotFastLaneCallFn {
-     833                 :            :     fallback() external payable {} 
-     834                 :            : }
-     835                 :            : 
-     836                 :            : contract BrokenSearcherForgotReturnBoolBytes {
-     837                 :            :     function fastLaneCall(
-     838                 :            :             address _sender,
-     839                 :            :             uint256 _bidAmount,
-     840                 :            :             bytes calldata _searcherCallData
-     841                 :            :     ) external payable /* returns (bool, bytes memory) <- FORGOTTEN */ {
-     842                 :            :     }
-     843                 :            : }
-     844                 :            : 
-     845                 :            : 
-     846                 :            : // Purpose is to do nothing, hence not repaying the relay
-     847                 :            : contract BrokenSearcherRepayer {
-     848                 :            :     function fastLaneCall(
-     849                 :            :             address _sender,
-     850                 :            :             uint256 _bidAmount,
-     851                 :            :             bytes calldata _searcherCallData
-     852                 :            :     ) external payable returns (bool, bytes memory) {
-     853                 :          1 :         return (true,bytes("ok"));
-     854                 :            :     }
-     855                 :            : }
-     856                 :            : 
-     857                 :            : // Purpose is only repay partially the relay
-     858                 :            : contract BrokenSearcherRepayerPartial {
-     859                 :            :     function fastLaneCall(
-     860                 :            :             address _sender,
-     861                 :            :             uint256 _bidAmount,
-     862                 :            :             bytes calldata _searcherCallData
-     863                 :            :     ) external payable returns (bool, bytes memory) {
-     864                 :          1 :         bool success;
-     865                 :          1 :         uint256 amount = 1 ether;
-     866                 :          1 :         address to = msg.sender;
-     867                 :            :         assembly {
-     868                 :            :             // Transfer the ETH and store if it succeeded or not.
-     869                 :          1 :             success := call(gas(), to, amount, 0, 0, 0, 0)
-     870                 :            :         }
-     871                 :            : 
-     872         [ #  + ]:          1 :         require(success, "ETH_TRANSFER_FAILED");
-     873                 :          1 :         return (true,bytes("ok"));
-     874                 :            :     }
-     875                 :            : }
-     876                 :            : 
-     877                 :            : 
-     878                 :            : contract SearcherRepayerEcho {
-     879                 :            :     function fastLaneCall(
-     880                 :            :             address _sender,
-     881                 :            :             uint256 _bidAmount,
-     882                 :            :             bytes calldata _searcherCallData
-     883                 :            :     ) external payable returns (bool, bytes memory) {
-     884                 :          3 :         bool success;
-     885                 :          3 :         address to = msg.sender;
-     886                 :            : 
-     887                 :            :         assembly {
-     888                 :            :             // Transfer the ETH and store if it succeeded or not.
-     889                 :          3 :             success := call(gas(), to, _bidAmount, 0, 0, 0, 0)
-     890                 :            :         }
-     891                 :            : 
-     892         [ #  + ]:          3 :         require(success, "ETH_TRANSFER_FAILED");
-     893                 :          3 :         return (true,bytes("ok"));
-     894                 :            :     }
-     895                 :            : }
-     896                 :            : 
-     897                 :            : 
-     898                 :            : contract SearcherRepayerEvilEcho {
-     899                 :            :     function fastLaneCall(
-     900                 :            :             address _sender,
-     901                 :            :             uint256 _bidAmount,
-     902                 :            :             bytes calldata _searcherCallData
-     903                 :            :     ) external payable returns (bool, bytes memory) {
-     904                 :          1 :         bool success;
-     905                 :          1 :         address payable to = payable(msg.sender);
-     906                 :            : 
-     907                 :          1 :         FastLaneAuctionHandler(to).collectFees();
-     908                 :            :         assembly {
-     909                 :            :             // Transfer the ETH and store if it succeeded or not.
-     910                 :          0 :             success := call(gas(), to, _bidAmount, 0, 0, 0, 0)
-     911                 :            :         }
-     912                 :            : 
-     913         [ #  # ]:          0 :         require(success, "ETH_TRANSFER_FAILED");
-     914                 :          0 :         return (true,bytes("ok"));
-     915                 :            :     }
-     916                 :            : }
-     917                 :            : 
-     918                 :            : contract SearcherRepayerOverpayerDouble {
-     919                 :            :     function fastLaneCall(
-     920                 :            :             address _sender,
-     921                 :            :             uint256 _bidAmount,
-     922                 :            :             bytes calldata _searcherCallData
-     923                 :            :     ) external payable returns (bool, bytes memory) {
-     924                 :          2 :         bool success;
-     925                 :          2 :         uint256 amount = _bidAmount * 2;
-     926                 :          2 :         address to = msg.sender;
-     927                 :            :         assembly {
-     928                 :            :             // Transfer the ETH and store if it succeeded or not.
-     929                 :          2 :             success := call(gas(), to, amount, 0, 0, 0, 0)
-     930                 :            :         }
-     931                 :            : 
-     932         [ #  + ]:          2 :         require(success, "ETH_TRANSFER_FAILED");
-     933                 :          2 :         return (true,bytes("ok"));
-     934                 :            :     }
-     935                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/PFL_Relay.t.sol.func-sort-c.html b/report/test/PFL_Relay.t.sol.func-sort-c.html deleted file mode 100644 index 884eefa..0000000 --- a/report/test/PFL_Relay.t.sol.func-sort-c.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - LCOV - lcov.info - test/PFL_Relay.t.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test - PFL_Relay.t.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:121963.2 %
Date:2022-11-15 17:07:48Functions:4757.1 %
Branches:2633.3 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
BrokenSearcherForgotFastLaneCallFn.0
BrokenUniswap.sickTrade0
SearcherRepayerOverpayerDouble.fastLaneCall0
BrokenSearcherForgotReturnBoolBytes.fastLaneCall1
BrokenSearcherRepayer.fastLaneCall1
BrokenSearcherRepayerPartial.fastLaneCall1
SearcherRepayerEcho.fastLaneCall1
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/PFL_Relay.t.sol.func.html b/report/test/PFL_Relay.t.sol.func.html deleted file mode 100644 index 9cec536..0000000 --- a/report/test/PFL_Relay.t.sol.func.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - LCOV - lcov.info - test/PFL_Relay.t.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test - PFL_Relay.t.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:121963.2 %
Date:2022-11-15 17:07:48Functions:4757.1 %
Branches:2633.3 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
BrokenSearcherForgotFastLaneCallFn.0
BrokenSearcherForgotReturnBoolBytes.fastLaneCall1
BrokenSearcherRepayer.fastLaneCall1
BrokenSearcherRepayerPartial.fastLaneCall1
BrokenUniswap.sickTrade0
SearcherRepayerEcho.fastLaneCall1
SearcherRepayerOverpayerDouble.fastLaneCall0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/PFL_Relay.t.sol.gcov.html b/report/test/PFL_Relay.t.sol.gcov.html deleted file mode 100644 index f09ca40..0000000 --- a/report/test/PFL_Relay.t.sol.gcov.html +++ /dev/null @@ -1,460 +0,0 @@ - - - - - - - LCOV - lcov.info - test/PFL_Relay.t.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test - PFL_Relay.t.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:121963.2 %
Date:2022-11-15 17:07:48Functions:4757.1 %
Branches:2633.3 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : // SPDX-License-Identifier: UNLICENSED
-       2                 :            : pragma solidity ^0.8.16;
-       3                 :            : 
-       4                 :            : import "forge-std/Test.sol";
-       5                 :            : import "forge-std/console.sol";
-       6                 :            : import "forge-std/console2.sol";
-       7                 :            : 
-       8                 :            : import "contracts/legacy/FastLaneLegacyAuction.sol";
-       9                 :            : 
-      10                 :            : 
-      11                 :            : import "openzeppelin-contracts/contracts/utils/Strings.sol";
-      12                 :            : import "openzeppelin-contracts/contracts/utils/Address.sol";
-      13                 :            : import "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";
-      14                 :            : 
-      15                 :            : import "contracts/interfaces/IWMatic.sol";
-      16                 :            : 
-      17                 :            : import { MockERC20 } from "solmate/test/utils/mocks/MockERC20.sol";
-      18                 :            : 
-      19                 :            : import { PFLHelper } from "./PFLAuction.t.sol";
-      20                 :            : 
-      21                 :            : import "contracts/jit-relay/FastLaneRelay.sol";
-      22                 :            : 
-      23                 :            : import { SearcherContractExample } from "contracts/jit-searcher/FastLaneSearcherWrapper.sol";
-      24                 :            : 
-      25                 :            : contract PFLRelayTest is PFLHelper, FastLaneRelayEvents {
-      26                 :            :     FastLaneRelay PFR;
-      27                 :            :     BrokenUniswap brokenUniswap;
-      28                 :            :     address PFL_VAULT = OPS_ADDRESS;
-      29                 :            :     function setUp() public {
-      30                 :            :         // Give money
-      31                 :            :         for (uint256 i = 0; i < BIDDERS.length; i++) {
-      32                 :            :             address currentBidder = BIDDERS[i];
-      33                 :            :             address currentSearcher = SEARCHERS[i];
-      34                 :            :             uint256 soonWMaticBidder = (10 ether * (i + 1));
-      35                 :            :             uint256 soonWMaticSearcher = (33 ether * (i + 1));
-      36                 :            :             vm.label(currentBidder,string.concat("BIDDER",Strings.toString(i+1)));
-      37                 :            :             vm.label(currentSearcher,string.concat("SEARCHER",Strings.toString(i+1)));
-      38                 :            :             vm.deal(currentBidder, soonWMaticBidder + 1);
-      39                 :            :             vm.deal(currentSearcher, soonWMaticSearcher + 1);
-      40                 :            :         }
-      41                 :            :         vm.prank(OWNER);
-      42                 :            : 
-      43                 :            :         uint24 stakeShare = 50_000;
-      44                 :            :         // Use PFL_VAULT as vault for repay checks
-      45                 :            :         PFR = new FastLaneRelay(stakeShare, 1 ether, false);
-      46                 :            :         brokenUniswap = new BrokenUniswap();
-      47                 :            : 
-      48                 :            :         vm.deal(address(brokenUniswap), 100 ether);
-      49                 :            :         vm.coinbase(VALIDATOR1);
-      50                 :            :         vm.label(VALIDATOR1,"VALIDATOR1");
-      51                 :            :         vm.label(OWNER,"OWNER");
-      52                 :            :         console.log("Block Coinbase: %s",block.coinbase);
-      53                 :            :     }
-      54                 :            : 
-      55                 :            :     function testSubmitFlashBid() public {
-      56                 :            : 
-      57                 :            :         vm.deal(SEARCHER_ADDRESS1, 100 ether);
-      58                 :            : 
-      59                 :            :         uint256 bidAmount = 0.001 ether;
-      60                 :            :         bytes32 oppTx = bytes32("tx1");
-      61                 :            : 
-      62                 :            :         // Deploy Searcher Wrapper as SEARCHER_ADDRESS1
-      63                 :            :         vm.prank(SEARCHER_ADDRESS1);
-      64                 :            : 
-      65                 :            :         SearcherContractExample SCE = new SearcherContractExample();
-      66                 :            : 
-      67                 :            :         address to = address(SCE);
-      68                 :            : 
-      69                 :            :         address expectedAnAddress = vm.addr(12);
-      70                 :            :         uint256 expectedAnAmount = 1337;
-      71                 :            : 
-      72                 :            :         // Simply abi encode the args we want to forward to the searcher contract so it can execute them 
-      73                 :            :         bytes memory searcherCallData = abi.encodeWithSignature("doStuff(address,uint256)", expectedAnAddress, expectedAnAmount);
-      74                 :            : 
-      75                 :            :         console.log("Tx origin: %s", tx.origin);
-      76                 :            :         console.log("Address this: %s", address(this));
-      77                 :            :         console.log("Address PFR: %s", address(PFR));
-      78                 :            :         console.log("Owner SCE: %s", SCE.owner());
-      79                 :            : 
-      80                 :            :         vm.prank(SEARCHER_ADDRESS1);
-      81                 :            : 
-      82                 :            :         vm.expectRevert(FastLaneRelayEvents.RelayPermissionNotFastlaneValidator.selector);
-      83                 :            :         PFR.submitFlashBid(bidAmount, oppTx, to, searcherCallData);
-      84                 :            : 
-      85                 :            :         vm.prank(OWNER);
-      86                 :            :         vm.expectEmit(true, true, true, true);
-      87                 :            :         emit RelayValidatorEnabled(VALIDATOR1, VALIDATOR1);
-      88                 :            :         PFR.enableRelayValidator(VALIDATOR1, VALIDATOR1);
-      89                 :            : 
-      90                 :            :         vm.startPrank(SEARCHER_ADDRESS1);
-      91                 :            :         vm.expectRevert(FastLaneRelayEvents.RelaySearcherWrongParams.selector);
-      92                 :            :         PFR.submitFlashBid(bidAmount, oppTx, to,  searcherCallData);
-      93                 :            :         vm.expectRevert(FastLaneRelayEvents.RelaySearcherWrongParams.selector);
-      94                 :            :         PFR.submitFlashBid(bidAmount, oppTx, address(0),  searcherCallData);
-      95                 :            :         vm.expectRevert(FastLaneRelayEvents.RelaySearcherWrongParams.selector);
-      96                 :            :         PFR.submitFlashBid(0.001 ether, oppTx, to,  searcherCallData);
-      97                 :            : 
-      98                 :            :         bidAmount = 2 ether;
-      99                 :            : 
-     100                 :            :         vm.expectRevert(bytes("InvalidPermissions"));
-     101                 :            :         PFR.submitFlashBid(bidAmount, oppTx, to,  searcherCallData);
-     102                 :            :         // Authorize Relay as Searcher
-     103                 :            :         SCE.setPFLAuctionAddress(address(PFR));
-     104                 :            : 
-     105                 :            :         // Authorize test address as EOA
-     106                 :            :         SCE.approveFastLaneEOA(address(this));
-     107                 :            : 
-     108                 :            :         vm.expectRevert(bytes("SearcherInsufficientFunds  2000000000000000000 0"));
-     109                 :            :         PFR.submitFlashBid(bidAmount, oppTx, to,  searcherCallData);
-     110                 :            : 
-     111                 :            :         vm.expectRevert(bytes("SearcherInsufficientFunds  2000000000000000000 1000000000000000000"));
-     112                 :            :         PFR.submitFlashBid{value: 1 ether}(bidAmount, oppTx, to,  searcherCallData);
-     113                 :            : 
-     114                 :            : 
-     115                 :            :         vm.expectEmit(true, true, true, true);
-     116                 :            :         emit RelayFlashBid(SEARCHER_ADDRESS1, bidAmount, oppTx, VALIDATOR1, address(SCE));
-     117                 :            :         PFR.submitFlashBid{value: 5 ether}(bidAmount, oppTx, to,  searcherCallData);
-     118                 :            : 
-     119                 :            :         // Check Balances
-     120                 :            :         console.log("Balance PFR: %s", address(PFR).balance);
-     121                 :            :         assertEq(bidAmount, address(PFR).balance);
-     122                 :            : 
-     123                 :            :         // Verify `doStuff` got hit
-     124                 :            :         assertEq(expectedAnAddress, SCE.anAddress());
-     125                 :            :         assertEq(expectedAnAmount, SCE.anAmount());
-     126                 :            : 
-     127                 :            :         // Stake Share & Validator paid
-     128                 :            :         (uint256 vC, uint256 sC) = _calculateCuts(bidAmount, PFR.flStakeShareRatio()); 
-     129                 :            :         assertEq(sC, PFR.getCurrentStakeBalance());
-     130                 :            :         assertEq(vC, PFR.getValidatorBalance(block.coinbase));
-     131                 :            :         assertEq(sC+vC, bidAmount);
-     132                 :            : 
-     133                 :            :         console.log("Balance Stake: %s", PFR.getCurrentStakeBalance());
-     134                 :            :         console.log("Balance Coinbase: %s",  PFR.getValidatorBalance(block.coinbase));
-     135                 :            : 
-     136                 :            :         // Replay attempt
-     137                 :            :         vm.expectRevert(FastLaneRelayEvents.RelayAuctionBidReceivedLate.selector);
-     138                 :            :         PFR.submitFlashBid{value: 5 ether}(bidAmount, oppTx, to,  searcherCallData);
-     139                 :            : 
-     140                 :            :         // Not winner
-     141                 :            :         vm.expectRevert(abi.encodeWithSelector(FastLaneRelayEvents.RelayAuctionSearcherNotWinner.selector, bidAmount - 1, bidAmount));
-     142                 :            :         PFR.submitFlashBid{value: 5 ether}(bidAmount - 1, oppTx, to,  searcherCallData);
-     143                 :            : 
-     144                 :            :         // Failed searcher call inside their contract
-     145                 :            :         bytes memory searcherFailCallData = abi.encodeWithSignature("doFail()");
-     146                 :            :         // Will fail as Error(string), thereafter encoded through the custom error RelaySearcherCallFailure
-     147                 :            :         // 0x291bc14c0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006408c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000f4641494c5f4f4e5f505552504f5345000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-     148                 :            : 
-     149                 :            :         // To recover:
-     150                 :            :         // Remove selector 0x291bc14c
-     151                 :            :         // bytes memory z = hex"0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006408c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000f4641494c5f4f4e5f505552504f5345000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
-     152                 :            :         // abi.decode(z,(bytes)); // 0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000f4641494c5f4f4e5f505552504f53450000000000000000000000000000000000
-     153                 :            :         // Remove selector 0x08c379a
-     154                 :            :         // bytes memory d = hex"00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000f4641494c5f4f4e5f505552504f53450000000000000000000000000000000000"
-     155                 :            :         // abi.decode(d,(string)) -> FAIL_ON_PURPOSE
-     156                 :            : 
-     157                 :            :         // Helper: PFR.humanizeError()
-     158                 :            :  
-     159                 :            :         {
-     160                 :            :         bytes memory encoded = abi.encodeWithSelector(FastLaneRelayEvents.RelaySearcherCallFailure.selector, abi.encodeWithSignature("Error(string)","FAIL_ON_PURPOSE"));
-     161                 :            :         
-     162                 :            :         console.logBytes(encoded);
-     163                 :            :         console.log(PFR.humanizeError(encoded));
-     164                 :            : 
-     165                 :            :         // Decode error
-     166                 :            :         assertEq(PFR.humanizeError(encoded), "FAIL_ON_PURPOSE");
-     167                 :            : 
-     168                 :            :         vm.expectRevert(abi.encodeWithSelector(FastLaneRelayEvents.RelaySearcherCallFailure.selector, abi.encodeWithSignature("Error(string)","FAIL_ON_PURPOSE")));
-     169                 :            :         PFR.submitFlashBid{value: 5 ether}(bidAmount - 1, bytes32("willfailtx"), to,  searcherFailCallData);
-     170                 :            : 
-     171                 :            :         }
-     172                 :            :     }
-     173                 :            : 
-     174                 :            :     function testWrongSearcherRepay() public {
-     175                 :            : 
-     176                 :            :         vm.prank(OWNER);
-     177                 :            :         PFR.enableRelayValidator(VALIDATOR1, VALIDATOR1);
-     178                 :            : 
-     179                 :            :         uint256 bidAmount = 2 ether;
-     180                 :            : 
-     181                 :            :         vm.prank(SEARCHER_ADDRESS1);
-     182                 :            : 
-     183                 :            :         bytes memory searcherUnusedData = abi.encodeWithSignature("unused()");
-     184                 :            : 
-     185                 :            :         // Searcher BSFFLC contract forgot to implement fastLaneCall(uint256,address,bytes)
-     186                 :            :         BrokenSearcherForgotFastLaneCallFn BSFFLC = new BrokenSearcherForgotFastLaneCallFn();
-     187                 :            :         vm.expectRevert();
-     188                 :            :         PFR.submitFlashBid{value: 5 ether}(bidAmount, bytes32("randomTx"), address(BSFFLC),  searcherUnusedData);
-     189                 :            : 
-     190                 :            :         // Searcher BSFFLC contract implemented `fastLaneCall` but forgot to return (bool, bytes);
-     191                 :            :         BrokenSearcherForgotReturnBoolBytes BSFRBB = new BrokenSearcherForgotReturnBoolBytes();
-     192                 :            :         vm.expectRevert();
-     193                 :            :         PFR.submitFlashBid{value: 5 ether}(bidAmount, bytes32("randomTx"), address(BSFRBB),  searcherUnusedData);
-     194                 :            : 
-     195                 :            : 
-     196                 :            :         // Searcher implemented but doesn't manage to repay the relay
-     197                 :            :         BrokenSearcherRepayer BRP = new BrokenSearcherRepayer();
-     198                 :            :         vm.expectRevert(abi.encodeWithSelector(FastLaneRelayEvents.RelayNotRepaid.selector, bidAmount, 0));
-     199                 :            :         PFR.submitFlashBid{value: 5 ether}(bidAmount, bytes32("randomTx"), address(BRP),  searcherUnusedData);
-     200                 :            : 
-     201                 :            :         // Searcher implemented but doesn't manage to repay the relay in full
-     202                 :            :         BrokenSearcherRepayerPartial BRPP = new BrokenSearcherRepayerPartial();
-     203                 :            :         vm.deal(address(BRPP), 10 ether);
-     204                 :            :         vm.expectRevert(abi.encodeWithSelector(FastLaneRelayEvents.RelayNotRepaid.selector, bidAmount, 1 ether));
-     205                 :            :         PFR.submitFlashBid{value: 5 ether}(bidAmount, bytes32("randomTx"), address(BRPP),  searcherUnusedData);
-     206                 :            :         
-     207                 :            :     }
-     208                 :            : 
-     209                 :            : 
-     210                 :            :     function testEnableValidator() public {
-     211                 :            :         vm.startPrank(OWNER);
-     212                 :            :         vm.expectRevert(FastLaneRelayEvents.RelayCannotBeZero.selector);
-     213                 :            :         PFR.enableRelayValidator(VALIDATOR1, address(0));
-     214                 :            :     }
-     215                 :            : 
-     216                 :            :     function testPayValidator() public {
-     217                 :            : 
-     218                 :            :         vm.deal(SEARCHER_ADDRESS1, 100 ether);
-     219                 :            : 
-     220                 :            :         uint256 bidAmount = 2 ether;
-     221                 :            :         bytes32 oppTx = bytes32("tx1");
-     222                 :            :         bytes memory searcherUnusedData = abi.encodeWithSignature("unused()");
-     223                 :            : 
-     224                 :            :         vm.prank(OWNER);
-     225                 :            :         PFR.enableRelayValidator(VALIDATOR1, VALIDATOR1);
-     226                 :            :         SearcherRepayerEcho SRE = new SearcherRepayerEcho();
-     227                 :            : 
-     228                 :            :         vm.prank(SEARCHER_ADDRESS1);
-     229                 :            :         PFR.submitFlashBid{value: 5 ether}(bidAmount, bytes32("randomTx"), address(SRE),  searcherUnusedData);
-     230                 :            : 
-     231                 :            :         uint256 snap = vm.snapshot();
-     232                 :            : 
-     233                 :            :         vm.prank(VALIDATOR2);
-     234                 :            :         vm.expectRevert(FastLaneRelayEvents.RelayPermissionUnauthorized.selector);
-     235                 :            :         PFR.payValidator(VALIDATOR1);
-     236                 :            : 
-     237                 :            :         
-     238                 :            : 
-     239                 :            :         vm.prank(VALIDATOR1);
-     240                 :            :         vm.expectEmit(true, true, true, true);
-     241                 :            :         emit RelayProcessingPaidValidator(VALIDATOR1, 1.9 ether, VALIDATOR1);
-     242                 :            : 
-     243                 :            :         uint256 balanceBefore = VALIDATOR1.balance;
-     244                 :            :         PFR.payValidator(VALIDATOR1);
-     245                 :            : 
-     246                 :            :         // Validator actually got paid
-     247                 :            :         assertEq(VALIDATOR1.balance, balanceBefore + 1.9 ether);
-     248                 :            :         
-     249                 :            :         assertEq(0, PFR.validatorsTotal());
-     250                 :            : 
-     251                 :            :         // Again
-     252                 :            :         vm.prank(VALIDATOR1);
-     253                 :            :         uint256 payableBalance = PFR.payValidator(VALIDATOR1);
-     254                 :            :         assertEq(0, payableBalance);
-     255                 :            : 
-     256                 :            :         // Back to pre-payment. VALIDATOR1 has 1.9 matic to withdraw.
-     257                 :            :         vm.revertTo(snap);
-     258                 :            : 
-     259                 :            :         // As SEARCHER_2 try to update VALIDATOR1 payee, no-no.
-     260                 :            :         vm.prank(SEARCHER_ADDRESS2);
-     261                 :            :         vm.expectRevert(FastLaneRelayEvents.RelayPermissionUnauthorized.selector);
-     262                 :            :         PFR.updateValidatorPayee(VALIDATOR1, SEARCHER_ADDRESS2);
-     263                 :            : 
-     264                 :            :         // Legit update
-     265                 :            :         vm.prank(VALIDATOR1);
-     266                 :            : 
-     267                 :            :         vm.expectEmit(true, true, true, true);
-     268                 :            :         emit RelayValidatorPayeeUpdated(VALIDATOR1, SEARCHER_ADDRESS2, VALIDATOR1);
-     269                 :            : 
-     270                 :            :         PFR.updateValidatorPayee(VALIDATOR1, SEARCHER_ADDRESS2);
-     271                 :            : 
-     272                 :            :     }
-     273                 :            : 
-     274                 :            :     function testOwnerOnly() public {
-     275                 :            :         vm.startPrank(OWNER);
-     276                 :            :         vm.expectEmit(true, true, true, true);
-     277                 :            :         emit RelayPausedStateSet(true);
-     278                 :            :         PFR.setPausedState(true);
-     279                 :            :          
-     280                 :            : 
-     281                 :            :         vm.expectRevert(FastLaneRelayEvents.RelayPermissionPaused.selector);
-     282                 :            :         PFR.payValidator(vm.addr(3333));
-     283                 :            :     }
-     284                 :            : }
-     285                 :            : 
-     286                 :            : // Fake opportunity to backrun
-     287                 :            : contract BrokenUniswap {
-     288                 :            :     function sickTrade(uint256 unused) external {
-     289                 :          0 :         payable(msg.sender).transfer(address(this).balance / 2);
-     290                 :            :     }
-     291                 :            : }
-     292                 :            : 
-     293                 :            : // Purpose is to do nothing, hence not repaying the relay
-     294                 :            : contract BrokenSearcherForgotFastLaneCallFn {
-     295                 :            :     fallback() external payable {} 
-     296                 :            : }
-     297                 :            : 
-     298                 :            : contract BrokenSearcherForgotReturnBoolBytes {
-     299                 :            :     function fastLaneCall(
-     300                 :            :             address _sender,
-     301                 :            :             uint256 _bidAmount,
-     302                 :            :             bytes calldata _searcherCallData
-     303                 :            :     ) external payable /* returns (bool, bytes memory) <- FORGOTTEN */ {
-     304                 :            :     }
-     305                 :            : }
-     306                 :            : 
-     307                 :            : 
-     308                 :            : // Purpose is to do nothing, hence not repaying the relay
-     309                 :            : contract BrokenSearcherRepayer {
-     310                 :            :     function fastLaneCall(
-     311                 :            :             address _sender,
-     312                 :            :             uint256 _bidAmount,
-     313                 :            :             bytes calldata _searcherCallData
-     314                 :            :     ) external payable returns (bool, bytes memory) {
-     315                 :          1 :         return (true,bytes("ok"));
-     316                 :            :     }
-     317                 :            : }
-     318                 :            : 
-     319                 :            : // Purpose is only repay partially the relay
-     320                 :            : contract BrokenSearcherRepayerPartial {
-     321                 :            :     function fastLaneCall(
-     322                 :            :             address _sender,
-     323                 :            :             uint256 _bidAmount,
-     324                 :            :             bytes calldata _searcherCallData
-     325                 :            :     ) external payable returns (bool, bytes memory) {
-     326                 :          1 :         bool success;
-     327                 :          1 :         uint256 amount = 1 ether;
-     328                 :          1 :         address to = msg.sender;
-     329                 :            :         assembly {
-     330                 :            :             // Transfer the ETH and store if it succeeded or not.
-     331                 :          1 :             success := call(gas(), to, amount, 0, 0, 0, 0)
-     332                 :            :         }
-     333                 :            : 
-     334         [ #  + ]:          1 :         require(success, "ETH_TRANSFER_FAILED");
-     335                 :          1 :         return (true,bytes("ok"));
-     336                 :            :     }
-     337                 :            : }
-     338                 :            : 
-     339                 :            : 
-     340                 :            : contract SearcherRepayerEcho {
-     341                 :            :     function fastLaneCall(
-     342                 :            :             address _sender,
-     343                 :            :             uint256 _bidAmount,
-     344                 :            :             bytes calldata _searcherCallData
-     345                 :            :     ) external payable returns (bool, bytes memory) {
-     346                 :          1 :         bool success;
-     347                 :          1 :         address to = msg.sender;
-     348                 :            :         assembly {
-     349                 :            :             // Transfer the ETH and store if it succeeded or not.
-     350                 :          1 :             success := call(gas(), to, _bidAmount, 0, 0, 0, 0)
-     351                 :            :         }
-     352                 :            : 
-     353         [ #  + ]:          1 :         require(success, "ETH_TRANSFER_FAILED");
-     354                 :          1 :         return (true,bytes("ok"));
-     355                 :            :     }
-     356                 :            : }
-     357                 :            : 
-     358                 :            : contract SearcherRepayerOverpayerDouble {
-     359                 :            :     function fastLaneCall(
-     360                 :            :             address _sender,
-     361                 :            :             uint256 _bidAmount,
-     362                 :            :             bytes calldata _searcherCallData
-     363                 :            :     ) external payable returns (bool, bytes memory) {
-     364                 :          0 :         bool success;
-     365                 :          0 :         uint256 amount = _bidAmount * 2;
-     366                 :          0 :         address to = msg.sender;
-     367                 :            :         assembly {
-     368                 :            :             // Transfer the ETH and store if it succeeded or not.
-     369                 :          0 :             success := call(gas(), to, amount, 0, 0, 0, 0)
-     370                 :            :         }
-     371                 :            : 
-     372         [ #  # ]:          0 :         require(success, "ETH_TRANSFER_FAILED");
-     373                 :          0 :         return (true,bytes("ok"));
-     374                 :            :     }
-     375                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/index-sort-b.html b/report/test/index-sort-b.html deleted file mode 100644 index 2d3ac29..0000000 --- a/report/test/index-sort-b.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - test - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - testHitTotalCoverage
Test:lcov.infoLines:212584.0 %
Date:2023-09-07 01:01:29Functions:6875.0 %
Branches:3837.5 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
PFL_AuctionHandler.t.sol -
84.0%84.0%
-
84.0 %21 / 2575.0 %6 / 837.5 %3 / 8
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/index-sort-f.html b/report/test/index-sort-f.html deleted file mode 100644 index eadc53e..0000000 --- a/report/test/index-sort-f.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - test - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - testHitTotalCoverage
Test:lcov.infoLines:212584.0 %
Date:2023-09-07 01:01:29Functions:6875.0 %
Branches:3837.5 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
PFL_AuctionHandler.t.sol -
84.0%84.0%
-
84.0 %21 / 2575.0 %6 / 837.5 %3 / 8
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/index-sort-l.html b/report/test/index-sort-l.html deleted file mode 100644 index 53e6513..0000000 --- a/report/test/index-sort-l.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - test - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - testHitTotalCoverage
Test:lcov.infoLines:212584.0 %
Date:2023-09-07 01:01:29Functions:6875.0 %
Branches:3837.5 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
PFL_AuctionHandler.t.sol -
84.0%84.0%
-
84.0 %21 / 2575.0 %6 / 837.5 %3 / 8
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/index.html b/report/test/index.html deleted file mode 100644 index 3ef4199..0000000 --- a/report/test/index.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - test - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - testHitTotalCoverage
Test:lcov.infoLines:212584.0 %
Date:2023-09-07 01:01:29Functions:6875.0 %
Branches:3837.5 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
PFL_AuctionHandler.t.sol -
84.0%84.0%
-
84.0 %21 / 2575.0 %6 / 837.5 %3 / 8
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/legacy-test/PFLAuction.t.sol.func-sort-c.html b/report/test/legacy-test/PFLAuction.t.sol.func-sort-c.html deleted file mode 100644 index 8191295..0000000 --- a/report/test/legacy-test/PFLAuction.t.sol.func-sort-c.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - LCOV - lcov.info - test/legacy-test/PFLAuction.t.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test/legacy-test - PFLAuction.t.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0270.0 %
Date:2023-09-07 01:01:29Functions:030.0 %
Branches:020.0 %
-
- -
- - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
PFLHelper._calculateCuts0
PFLHelper.setUpBiddersSearchersWallets0
PFLHelper.setUpMaticAndFastlane0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/legacy-test/PFLAuction.t.sol.func.html b/report/test/legacy-test/PFLAuction.t.sol.func.html deleted file mode 100644 index 46d4bb0..0000000 --- a/report/test/legacy-test/PFLAuction.t.sol.func.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - LCOV - lcov.info - test/legacy-test/PFLAuction.t.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test/legacy-test - PFLAuction.t.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0270.0 %
Date:2023-09-07 01:01:29Functions:030.0 %
Branches:020.0 %
-
- -
- - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
PFLHelper._calculateCuts0
PFLHelper.setUpBiddersSearchersWallets0
PFLHelper.setUpMaticAndFastlane0
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/legacy-test/PFLAuction.t.sol.gcov.html b/report/test/legacy-test/PFLAuction.t.sol.gcov.html deleted file mode 100644 index 80ad51c..0000000 --- a/report/test/legacy-test/PFLAuction.t.sol.gcov.html +++ /dev/null @@ -1,1342 +0,0 @@ - - - - - - - LCOV - lcov.info - test/legacy-test/PFLAuction.t.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test/legacy-test - PFLAuction.t.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:0270.0 %
Date:2023-09-07 01:01:29Functions:030.0 %
Branches:020.0 %
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : // SPDX-License-Identifier: UNLICENSED
-       2                 :            : pragma solidity ^0.8.15;
-       3                 :            : 
-       4                 :            : import "forge-std/Test.sol";
-       5                 :            : import "forge-std/console.sol";
-       6                 :            : import "forge-std/console2.sol";
-       7                 :            : 
-       8                 :            : import "contracts/legacy/FastLaneLegacyAuction.sol";
-       9                 :            : 
-      10                 :            : import "openzeppelin-contracts/contracts/utils/Strings.sol";
-      11                 :            : import "openzeppelin-contracts/contracts/utils/Address.sol";
-      12                 :            : import "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";
-      13                 :            : 
-      14                 :            : import "contracts/interfaces/IWMatic.sol";
-      15                 :            : 
-      16                 :            : import { MockERC20 } from "solmate/test/utils/mocks/MockERC20.sol";
-      17                 :            : 
-      18                 :            : 
-      19                 :            : // 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889 - Mumbai WMATIC
-      20                 :            : // 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270 - Polygon Mainnet WMATIC
-      21                 :            : 
-      22                 :            : abstract contract PFLHelper is Test, FastLaneEvents {
-      23                 :            : 
-      24                 :            :     using Address for address payable;
-      25                 :            :     FastLaneLegacyAuction public FLA;
-      26                 :            :     address constant MUMBAI_MATIC = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889;
-      27                 :            :     address constant OPS_ADDRESS = address(0xBEEF);
-      28                 :            :     WMATIC public wMatic;
-      29                 :            : 
-      30                 :            :     address public OWNER = 0xa401DCcD23DCdbc7296bDfb8A6c8d61106711CA6;
-      31                 :            : 
-      32                 :            :     address public BIDDER1 = 0xc71E2Df87C93bC3Ddba80e14406F3880E3D19D3e;
-      33                 :            : 
-      34                 :            :     address public BIDDER2 = 0x174237f20a0925d5eFEA401e5279181f0b7515EE;
-      35                 :            :     address public BIDDER3 = 0xFba52cDB2B36eCc27ac229b8feb2455B6aE3014b;
-      36                 :            :     address public BIDDER4 = 0xc4208Be0F01C8DBB57D0269887ccD5D269dEFf3B;
-      37                 :            : 
-      38                 :            :     address public VALIDATOR1 = 0x8149d8a0aCE8c058a679a1Fd4257aA1F1d2b9103;
-      39                 :            :     address public VALIDATOR2 = 0x161c3421Da27CD26E3c46Eb5711743343d17352d;
-      40                 :            :     address public VALIDATOR3 = 0x60d86bBFD061A359fd3B3E6Ef422b74B886f9a4a;
-      41                 :            :     address public VALIDATOR4 = 0x68F248c6B7820B191E4ed18c3d618ba7aC527C99;
-      42                 :            : 
-      43                 :            :     address public OPPORTUNITY1 = 0x8af6F6CA42171fc823619AC33a9A6C1892CA980B;
-      44                 :            :     address public OPPORTUNITY2 = 0x6eD132ea309B432FD49C9e70bc4F8Da429022F77;
-      45                 :            :     address public OPPORTUNITY3 = 0x8fcB7fb5e84847029Ba3e055BE46b86a4693AE40;
-      46                 :            :     address public OPPORTUNITY4 = 0x29D59575e85282c05112BEEC53fFadE66d3c7CD1;
-      47                 :            : 
-      48                 :            :     address public BROKE_BIDDER = 0xD057089743dc1461b1099Dee7A8CB848E361f6d9;
-      49                 :            :     address public BROKE_SEARCHER = 0xD057089743dc1461b1099Dee7A8CB848E361f6d9;
-      50                 :            : 
-      51                 :            :     address public SEARCHER_ADDRESS1 =  0x14BA06E061ada0443dbE5c7617A529Dd791c3146;
-      52                 :            :     address public SEARCHER_ADDRESS2 =  0x428a87F9c0ed1Bb9cdCE42f606e030ba40a525f3;
-      53                 :            :     address public SEARCHER_ADDRESS3 =  0x791e001586B75B8880bC6D02f2Ee19D42ec23E18;
-      54                 :            :     address public SEARCHER_ADDRESS4 =  0x4BF8fC74846da2dc54cCfd1f4fFac595939399e4;
-      55                 :            : 
-      56                 :            :     address public REFUND_RECIPIENT = 0xFdE9601264EBB3B664B7E37E9D3487D8fabB9001;
-      57                 :            : 
-      58                 :            :     address[] public BIDDERS = [BIDDER1, BIDDER2, BIDDER3, BIDDER4];
-      59                 :            : 
-      60                 :            :     address[] public SEARCHERS = [SEARCHER_ADDRESS1, SEARCHER_ADDRESS2, SEARCHER_ADDRESS3, SEARCHER_ADDRESS4];
-      61                 :            : 
-      62                 :            :     address[] public VALIDATORS = [
-      63                 :            :         VALIDATOR1,
-      64                 :            :         VALIDATOR2,
-      65                 :            :         VALIDATOR3,
-      66                 :            :         VALIDATOR4
-      67                 :            :     ];
-      68                 :            :     address[] public OPPORTUNITIES = [
-      69                 :            :         OPPORTUNITY1,
-      70                 :            :         OPPORTUNITY2,
-      71                 :            :         OPPORTUNITY3,
-      72                 :            :         OPPORTUNITY4
-      73                 :            :     ];
-      74                 :            : 
-      75                 :            :     constructor() {}
-      76                 :            : 
-      77                 :            :     // function logReads(address addr) public {
-      78                 :            :     //     (bytes32[] memory reads, bytes32[] memory writes) = vm.accesses(
-      79                 :            :     //         address(addr)
-      80                 :            :     //     );
-      81                 :            :     //     for (uint256 i; i < reads.length; i++) {
-      82                 :            :     //         emit log_uint(uint256(reads[i]));
-      83                 :            :     //     }
-      84                 :            :     // }
-      85                 :            : 
-      86                 :            :     function _calculateCuts(uint256 amount,uint256 fee) internal pure returns (uint256 vCut, uint256 flCut) {
-      87                 :          0 :         vCut = (amount * (1000000 - fee)) / 1000000;
-      88                 :          0 :         flCut = amount - vCut;
-      89                 :            :     }
-      90                 :            : 
-      91                 :            :     function setUpMaticAndFastlane(bool noAuction) public returns (address) {
-      92                 :            :         // Obtained from
-      93                 :            :         // emit log_bytes(bytecode); of vm.getCode("Wmatic.sol")
-      94                 :          0 :         bytes memory bytecode = hex"60c0604052600d60808190527f57726170706564204d617469630000000000000000000000000000000000000060a090815261003e91600091906100a3565b506040805180820190915260068082527f574d4154494300000000000000000000000000000000000000000000000000006020909201918252610083916001916100a3565b506002805460ff1916601217905534801561009d57600080fd5b5061013e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100e457805160ff1916838001178555610111565b82800160010185558215610111579182015b828111156101115782518255916020019190600101906100f6565b5061011d929150610121565b5090565b61013b91905b8082111561011d5760008155600101610127565b90565b6106568061014d6000396000f3006080604052600436106100925760003560e01c63ffffffff16806306fdde031461009c578063095ea7b31461012657806318160ddd1461015e57806323b872dd146101855780632e1a7d4d146101af578063313ce567146101c757806370a08231146101f257806395d89b4114610213578063a9059cbb14610228578063d0e30db014610092578063dd62ed3e1461024c575b61009a610273565b005b3480156100a857600080fd5b506100b16102c2565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100eb5781810151838201526020016100d3565b50505050905090810190601f1680156101185780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561013257600080fd5b5061014a600160a060020a0360043516602435610350565b604080519115158252519081900360200190f35b34801561016a57600080fd5b506101736103b6565b60408051918252519081900360200190f35b34801561019157600080fd5b5061014a600160a060020a03600435811690602435166044356103bb565b3480156101bb57600080fd5b5061009a6004356104ef565b3480156101d357600080fd5b506101dc610584565b6040805160ff9092168252519081900360200190f35b3480156101fe57600080fd5b50610173600160a060020a036004351661058d565b34801561021f57600080fd5b506100b161059f565b34801561023457600080fd5b5061014a600160a060020a03600435166024356105f9565b34801561025857600080fd5b50610173600160a060020a036004358116906024351661060d565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103485780601f1061031d57610100808354040283529160200191610348565b820191906000526020600020905b81548152906001019060200180831161032b57829003601f168201915b505050505081565b336000818152600460209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b303190565b600160a060020a0383166000908152600360205260408120548211156103e057600080fd5b600160a060020a038416331480159061041e5750600160a060020a038416600090815260046020908152604080832033845290915290205460001914155b1561047e57600160a060020a038416600090815260046020908152604080832033845290915290205482111561045357600080fd5b600160a060020a03841660009081526004602090815260408083203384529091529020805483900390555b600160a060020a03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561050b57600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f1935050505015801561054a573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103485780601f1061031d57610100808354040283529160200191610348565b60006106063384846103bb565b9392505050565b6004602090815260009283526040808420909152908252902054815600a165627a7a723058206118e6580df80a8af43aaa932ff4545b6c57ca46d1b8c249807304c1f63050280029";
-      95                 :            :         
-      96                 :          0 :         address maticAddress;
-      97                 :            :         assembly {
-      98                 :          0 :             maticAddress := create(0, add(bytecode, 0x20), mload(bytecode))
-      99                 :            :         }
-     100                 :          0 :         vm.etch(MUMBAI_MATIC, maticAddress.code);
-     101                 :            : 
-     102                 :          0 :         vm.prank(OWNER);
-     103                 :            : 
-     104         [ #  # ]:          0 :         if (noAuction == false) {
-     105                 :          0 :             FLA = new FastLaneLegacyAuction(OWNER);
-     106                 :            : 
-     107                 :          0 :             vm.prank(OWNER);
-     108                 :          0 :             FLA.initialSetupAuction(MUMBAI_MATIC, OPS_ADDRESS, OWNER);
-     109                 :          0 :             return address(FLA);
-     110                 :            :         }
-     111                 :            :         
-     112                 :          0 :         return address(0);
-     113                 :            :     }
-     114                 :            : 
-     115                 :            :     function setUpBiddersSearchersWallets() public {
-     116                 :          0 :                 wMatic = WMATIC(MUMBAI_MATIC);
-     117                 :            : 
-     118                 :          0 :         for (uint256 i = 0; i < BIDDERS.length; i++) {
-     119                 :          0 :             address currentBidder = BIDDERS[i];
-     120                 :          0 :             address currentSearcher = SEARCHERS[i];
-     121                 :          0 :             vm.label(currentBidder,string.concat("BIDDER",Strings.toString(i+1)));
-     122                 :          0 :             vm.label(currentSearcher,string.concat("SEARCHER",Strings.toString(i+1)));
-     123                 :          0 :             uint256 soonWMaticBidder = (10 ether * (i + 1));
-     124                 :          0 :             uint256 soonWMaticSearcher = (33 ether * (i + 1));
-     125                 :            : 
-     126                 :          0 :             vm.deal(currentBidder, soonWMaticBidder + 1);
-     127                 :          0 :             vm.deal(currentSearcher, soonWMaticSearcher + 1);
-     128                 :            : 
-     129                 :          0 :             vm.prank(currentBidder);
-     130                 :          0 :             wMatic.deposit{value: soonWMaticBidder}();
-     131                 :          0 :             vm.prank(currentSearcher);
-     132                 :          0 :             wMatic.deposit{value: soonWMaticSearcher}();
-     133                 :            :             // console2.log(
-     134                 :            :             //     "[amount Bidder] :",
-     135                 :            :             //     i+1,
-     136                 :            :             //     " -> ",
-     137                 :            :             //     wMatic.balanceOf(currentBidder)
-     138                 :            :             // );
-     139                 :            :             // console2.log(
-     140                 :            :             //     "[amount Searcher] :",
-     141                 :            :             //     i+1,
-     142                 :            :             //     " -> ",
-     143                 :            :             //     wMatic.balanceOf(currentSearcher)
-     144                 :            :             // );
-     145                 :            :         }
-     146                 :            :     }
-     147                 :            : }
-     148                 :            : contract PFLAuctionTest is PFLHelper {
-     149                 :            : 
-     150                 :            : 
-     151                 :            : 
-     152                 :            :     function setUp() public {
-     153                 :            :   
-     154                 :            : 
-     155                 :            :         setUpMaticAndFastlane(false);
-     156                 :            :         setUpBiddersSearchersWallets();
-     157                 :            :         // address owner = FLA.owner();
-     158                 :            :         // console2.log("FLA OWNER:", owner);
-     159                 :            : 
-     160                 :            : 
-     161                 :            :         // console2.log("FLA deployed at:", address(FLA));
-     162                 :            :         // console2.log("WMATIC deployed at:", MUMBAI_MATIC);
-     163                 :            : 
-     164                 :            :         
-     165                 :            :     }
-     166                 :            : 
-     167                 :            :     function testStartStopNoBidAuction() public {
-     168                 :            :         console2.log("Sender", msg.sender);
-     169                 :            :         vm.startPrank(OWNER);
-     170                 :            :         // vm.record();
-     171                 :            : 
-     172                 :            :         FLA.startAuction();
-     173                 :            :         FLA.endAuction();
-     174                 :            : 
-     175                 :            :         assertTrue(FLA.auction_number() == 2);
-     176                 :            :         assertEq(FLA.getActivePrivilegesAuctionNumber(), 1);
-     177                 :            : 
-     178                 :            :         address starter = vm.addr(420);
-     179                 :            :         vm.expectEmit(true, false, false, false);
-     180                 :            :         emit AuctionStarterSet(starter);
-     181                 :            :         FLA.setStarter(starter);
-     182                 :            : 
-     183                 :            :         vm.stopPrank();
-     184                 :            :         vm.expectRevert(FastLaneEvents.PermissionNotOwnerNorStarter.selector);
-     185                 :            :         FLA.startAuction();
-     186                 :            : 
-     187                 :            :         vm.startPrank(starter);
-     188                 :            : 
-     189                 :            :         FLA.startAuction();
-     190                 :            :         FLA.endAuction();
-     191                 :            : 
-     192                 :            :         assertTrue(FLA.auction_number() == 3);
-     193                 :            :         assertEq(FLA.getActivePrivilegesAuctionNumber(), 2);
-     194                 :            :     }
-     195                 :            : 
-     196                 :            :     function testStartProcessStopMultipleEmptyAuctions() public {
-     197                 :            :         vm.startPrank(OWNER);
-     198                 :            :         // vm.record();
-     199                 :            : 
-     200                 :            :         vm.expectEmit(true, true, false, false);
-     201                 :            :         emit OpportunityAddressEnabled(OPPORTUNITY1,1);
-     202                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     203                 :            : 
-     204                 :            :         vm.expectEmit(true, true, false, false);
-     205                 :            :         emit ValidatorAddressEnabled(VALIDATOR1, 1);
-     206                 :            :         FLA.enableValidatorAddress(VALIDATOR1);
-     207                 :            : 
-     208                 :            :         FLA.startAuction();
-     209                 :            :         // Now live, delay to next
-     210                 :            :         vm.expectEmit(true, true, false, false);
-     211                 :            :         emit OpportunityAddressEnabled(OPPORTUNITY2,2);
-     212                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY2);
-     213                 :            :         
-     214                 :            :         vm.expectEmit(true, true, false, false);
-     215                 :            :         emit ValidatorAddressEnabled(VALIDATOR2, 2);
-     216                 :            :         FLA.enableValidatorAddress(VALIDATOR2);
-     217                 :            : 
-     218                 :            :         FLA.endAuction();
-     219                 :            : 
-     220                 :            :         FLA.startAuction();
-     221                 :            :         FLA.endAuction();
-     222                 :            : 
-     223                 :            :         assertTrue(FLA.auction_number() == 3);
-     224                 :            :     }
-     225                 :            :     function testValidatorCheckpoint() public {
-     226                 :            :         vm.startPrank(OWNER);
-     227                 :            : 
-     228                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     229                 :            :         FLA.enableValidatorAddress(VALIDATOR1);
-     230                 :            : 
-     231                 :            :         ValidatorBalanceCheckpoint memory vCheck = FLA.getCheckpoint(VALIDATOR1);
-     232                 :            : 
-     233                 :            :         assertTrue(vCheck.pendingBalanceAtlastBid == 0);
-     234                 :            :         assertTrue(vCheck.outstandingBalance == 0);
-     235                 :            :         assertTrue(vCheck.lastWithdrawnAuction == 0);
-     236                 :            :         assertTrue(vCheck.lastBidReceivedAuction == 0);
-     237                 :            : 
-     238                 :            :         Status memory st = FLA.getStatus(OPPORTUNITY1);
-     239                 :            :         assertTrue(st.activeAtAuctionRound == 1);
-     240                 :            :         assertTrue(st.inactiveAtAuctionRound == FLA.MAX_AUCTION_VALUE());
-     241                 :            :         assertTrue(st.kind == statusType.OPPORTUNITY);
-     242                 :            : 
-     243                 :            :         FLA.startAuction();
-     244                 :            :         FLA.enableValidatorAddress(VALIDATOR2);
-     245                 :            :         Status memory stVal2 = FLA.getStatus(VALIDATOR2);
-     246                 :            :         
-     247                 :            :         assertTrue(stVal2.activeAtAuctionRound == 2);
-     248                 :            :         assertTrue(stVal2.inactiveAtAuctionRound == FLA.MAX_AUCTION_VALUE());
-     249                 :            :         assertTrue(stVal2.kind == statusType.VALIDATOR);
-     250                 :            : 
-     251                 :            :     }
-     252                 :            : 
-     253                 :            :     function testStartProcessSingleOutBidAuction() public {
-     254                 :            :         vm.startPrank(OWNER);
-     255                 :            : 
-     256                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     257                 :            :         FLA.enableValidatorAddress(VALIDATOR1);
-     258                 :            : 
-     259                 :            :         FLA.startAuction();
-     260                 :            : 
-     261                 :            :         vm.stopPrank();
-     262                 :            :         vm.startPrank(BIDDER1);
-     263                 :            : 
-     264                 :            :         // Bid { validatorAddress - opportunityAddress - searcherContractAddress - searcherPayableAddress - bidAmount}
-     265                 :            :         Bid memory auctionWrongSearchableBid = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, BIDDER2, 11*10**18);
-     266                 :            :         Bid memory auctionWrongOpportunityBid = Bid(VALIDATOR1, OPPORTUNITY2, BIDDER1, BIDDER1, 11*10**18);
-     267                 :            :         Bid memory auctionWrongValidatorBid = Bid(VALIDATOR2, OPPORTUNITY1, BIDDER1, BIDDER1, 11*10**18);
-     268                 :            :         Bid memory auctionWrongIncrementBid = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, BIDDER1, 8*10**18);
-     269                 :            : 
-     270                 :            :         Bid memory auctionRightMinimumBidWithSearcher = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment());
-     271                 :            :         
-     272                 :            :         Bid memory auctionWrongDoubleSelfBidWithSearcherTooLow = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment() + 1);
-     273                 :            :         Bid memory auctionWrongDoubleSelfBidWithSearcherEnough = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment() * 2);
-     274                 :            : 
-     275                 :            :         Bid memory auctionWrongBrokeBidderBidTooLow = Bid(VALIDATOR1, OPPORTUNITY1, BROKE_BIDDER, BROKE_BIDDER, 8*10**18);
-     276                 :            :         Bid memory auctionWrongBrokeBidderBidEnough = Bid(VALIDATOR1, OPPORTUNITY1, BROKE_BIDDER, BROKE_BIDDER, FLA.bid_increment() * 2);
-     277                 :            : 
-     278                 :            :         // Bid memory auctionWrongBrokeSearcherBid = Bid(VALIDATOR1, OPPORTUNITY1, BROKE_BIDDER, BROKE_SEARCHER, 8*10**18);
-     279                 :            : 
-     280                 :            :         Bid memory auctionRightOutbidsTopBidderFirstPair = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER2, SEARCHER_ADDRESS2, FLA.bid_increment() * 2);
-     281                 :            :        
-     282                 :            :         // Bid should be coming from EOA that's paying aka BIDDER1 from line 186.
-     283                 :            :         vm.expectRevert(FastLaneEvents.PermissionOnlyFromPayorEoa.selector);
-     284                 :            :         FLA.submitBid(auctionWrongSearchableBid);
-     285                 :            :         
-     286                 :            :         // Attempts to bid from OPPORTUNITY2 which has not been enabled yet
-     287                 :            :         vm.expectRevert(FastLaneEvents.PermissionMustBeValidator.selector);
-     288                 :            :         FLA.submitBid(auctionWrongValidatorBid);
-     289                 :            :         
-     290                 :            :         vm.expectRevert(FastLaneEvents.PermissionInvalidOpportunityAddress.selector);
-     291                 :            :         FLA.submitBid(auctionWrongOpportunityBid);
-     292                 :            : 
-     293                 :            :         vm.expectRevert(FastLaneEvents.InequalityTooLow.selector);
-     294                 :            :         FLA.submitBid(auctionWrongIncrementBid);
-     295                 :            : 
-     296                 :            :         vm.stopPrank(); // Not BIDDER1 anymore
-     297                 :            :         
-     298                 :            :         vm.startPrank(auctionRightMinimumBidWithSearcher.searcherPayableAddress);
-     299                 :            : 
-     300                 :            :         // Missing approval
-     301                 :            :         vm.expectRevert(bytes("TRANSFER_FROM_FAILED"));
-     302                 :            :         FLA.submitBid(auctionRightMinimumBidWithSearcher);
-     303                 :            : 
-     304                 :            :         // Approve as the Payable
-     305                 :            :         wMatic.approve(address(FLA), 2**256 - 1);
-     306                 :            : 
-     307                 :            :         // First correct bid 
-     308                 :            :         uint balanceBefore = wMatic.balanceOf(auctionRightMinimumBidWithSearcher.searcherPayableAddress);
-     309                 :            : 
-     310                 :            :         vm.expectEmit(true, true, true, true, address(FLA));
-     311                 :            :         emit BidAdded(BIDDER1, VALIDATOR1, OPPORTUNITY1, FLA.bid_increment(), 1);
-     312                 :            :         // Check event
-     313                 :            :         FLA.submitBid(auctionRightMinimumBidWithSearcher);
-     314                 :            : 
-     315                 :            :         // Check Top Bid
-     316                 :            :         {
-     317                 :            :             (uint256 topBidAmount, uint128 currentAuctionNumber) = FLA.findLiveAuctionTopBid(VALIDATOR1, OPPORTUNITY1);
-     318                 :            :             assertEq(topBidAmount, FLA.bid_increment());
-     319                 :            :             assertEq(currentAuctionNumber, 1);
-     320                 :            :         }
-     321                 :            : 
-     322                 :            :         // Check checkpoint and cuts
-     323                 :            :         ValidatorBalanceCheckpoint memory vCheck = FLA.getCheckpoint(VALIDATOR1);
-     324                 :            : 
-     325                 :            :         (uint256 vCut,uint256 flCut) = _calculateCuts(auctionRightMinimumBidWithSearcher.bidAmount, FLA.fast_lane_fee());
-     326                 :            :         assertTrue(vCheck.pendingBalanceAtlastBid == vCut);
-     327                 :            :         assertTrue(vCheck.outstandingBalance == 0);
-     328                 :            :         assertTrue(vCheck.lastWithdrawnAuction == 0);
-     329                 :            :         assertTrue(vCheck.lastBidReceivedAuction == 1);
-     330                 :            : 
-     331                 :            :         assertTrue(FLA.outstandingFLBalance() == flCut);
-     332                 :            : 
-     333                 :            :         // Check balances
-     334                 :            :         assertEq(wMatic.balanceOf(auctionRightMinimumBidWithSearcher.searcherPayableAddress), balanceBefore - auctionRightMinimumBidWithSearcher.bidAmount);
-     335                 :            :         assertEq(wMatic.balanceOf(address(FLA)), auctionRightMinimumBidWithSearcher.bidAmount);
-     336                 :            : 
-     337                 :            :         vm.expectRevert(FastLaneEvents.InequalityTooLow.selector);
-     338                 :            :         FLA.submitBid(auctionWrongDoubleSelfBidWithSearcherTooLow);
-     339                 :            : 
-     340                 :            :         vm.expectRevert(FastLaneEvents.InequalityAlreadyTopBidder.selector);
-     341                 :            :         FLA.submitBid(auctionWrongDoubleSelfBidWithSearcherEnough);
-     342                 :            :   
-     343                 :            : 
-     344                 :            :         vm.stopPrank();
-     345                 :            : 
-     346                 :            :         // There was a bid valid before of FLA.bid_increment().
-     347                 :            :         // First we don't top it, then we do, but with an empty bank account. Both reverting.
-     348                 :            :         vm.startPrank(auctionWrongBrokeBidderBidTooLow.searcherPayableAddress);
-     349                 :            :         wMatic.approve(address(FLA), 2**256 - 1);
-     350                 :            :         vm.expectRevert(FastLaneEvents.InequalityTooLow.selector);
-     351                 :            :         FLA.submitBid(auctionWrongBrokeBidderBidTooLow);
-     352                 :            :        
-     353                 :            :         vm.expectRevert(FastLaneEvents.InequalityNotEnoughFunds.selector);
-     354                 :            :         FLA.submitBid(auctionWrongBrokeBidderBidEnough);
-     355                 :            : 
-     356                 :            :         vm.stopPrank();
-     357                 :            : 
-     358                 :            :         // Beat previous bid from another searcher on same pair
-     359                 :            :         
-     360                 :            :         vm.startPrank(auctionRightOutbidsTopBidderFirstPair.searcherPayableAddress);
-     361                 :            : 
-     362                 :            :         // Approve as the Payable
-     363                 :            :         wMatic.approve(address(FLA), 2**256 - 1);
-     364                 :            : 
-     365                 :            : 
-     366                 :            :         uint balanceBeforeOfFirstBidder = wMatic.balanceOf(auctionRightMinimumBidWithSearcher.searcherPayableAddress);
-     367                 :            :         uint balanceBeforeOfUpcomingBidder = wMatic.balanceOf(auctionRightOutbidsTopBidderFirstPair.searcherPayableAddress);
-     368                 :            :         uint outstandingFLBalanceBeforeOutbidding = FLA.outstandingFLBalance();
-     369                 :            : 
-     370                 :            :         vm.expectEmit(true, true, true, true, address(FLA));
-     371                 :            :         emit BidAdded(BIDDER2, VALIDATOR1, OPPORTUNITY1, FLA.bid_increment() * 2, 1);
-     372                 :            :         FLA.submitBid(auctionRightOutbidsTopBidderFirstPair);
-     373                 :            : 
-     374                 :            :         // Check refund since we have an existing bid
-     375                 :            :         uint balanceAfterOfFirstBidder = wMatic.balanceOf(auctionRightMinimumBidWithSearcher.searcherPayableAddress);
-     376                 :            :         // Bidder1 is whole again
-     377                 :            :         assertTrue(balanceAfterOfFirstBidder == balanceBeforeOfFirstBidder + auctionRightMinimumBidWithSearcher.bidAmount);
-     378                 :            : 
-     379                 :            :         // Bidder2 balance was taken
-     380                 :            :         uint balanceAfterOfUpcomingBidder = wMatic.balanceOf(auctionRightOutbidsTopBidderFirstPair.searcherPayableAddress);
-     381                 :            :         assertTrue(balanceAfterOfUpcomingBidder == balanceBeforeOfUpcomingBidder - auctionRightOutbidsTopBidderFirstPair.bidAmount);
-     382                 :            : 
-     383                 :            :         // And into the contract
-     384                 :            :         assertEq(wMatic.balanceOf(address(FLA)), auctionRightOutbidsTopBidderFirstPair.bidAmount);
-     385                 :            : 
-     386                 :            :         // Get updated checkpoint
-     387                 :            :         vCheck = FLA.getCheckpoint(VALIDATOR1);
-     388                 :            :         (uint256 vCut2,uint256 flCut2) = _calculateCuts(auctionRightOutbidsTopBidderFirstPair.bidAmount, FLA.fast_lane_fee());
-     389                 :            :         assertTrue(vCheck.pendingBalanceAtlastBid == vCut2);
-     390                 :            :         assertTrue(vCheck.outstandingBalance == 0);
-     391                 :            :         assertTrue(vCheck.lastWithdrawnAuction == 0);
-     392                 :            :         assertTrue(vCheck.lastBidReceivedAuction == 1);
-     393                 :            : 
-     394                 :            :         assertTrue(FLA.outstandingFLBalance() == outstandingFLBalanceBeforeOutbidding - flCut + flCut2);
-     395                 :            : 
-     396                 :            : 
-     397                 :            :         vm.stopPrank();
-     398                 :            :         vm.startPrank(OWNER);
-     399                 :            : 
-     400                 :            :         uint cut = FLA.outstandingFLBalance();
-     401                 :            : 
-     402                 :            :         // Check Top Bid
-     403                 :            :         {
-     404                 :            :             (uint256 topBidAmount, uint128 currentAuctionNumber) = FLA.findLiveAuctionTopBid(VALIDATOR1, OPPORTUNITY1);
-     405                 :            :             assertEq(topBidAmount, FLA.bid_increment()*2);
-     406                 :            :             assertEq(currentAuctionNumber, 1);
-     407                 :            :         }
-     408                 :            :         FLA.endAuction();
-     409                 :            :         assertTrue(wMatic.balanceOf(OWNER) == cut);
-     410                 :            : 
-     411                 :            :         // Check Winner
-     412                 :            :         {
-     413                 :            :             (bool hasWinner, address winner, uint128 winningAuctionNumber) = FLA.findFinalizedAuctionWinnerAtAuction(1,VALIDATOR1, OPPORTUNITY1);
-     414                 :            :             assertEq(hasWinner, true);
-     415                 :            :             assertEq(winner, BIDDER2);
-     416                 :            :             assertEq(winningAuctionNumber, 1);
-     417                 :            :         }
-     418                 :            :         {
-     419                 :            :             (bool hasWinner, address winner, uint128 winningAuctionNumber) = FLA.findLastFinalizedAuctionWinner(VALIDATOR1, OPPORTUNITY1);
-     420                 :            :             assertEq(hasWinner, true);
-     421                 :            :             assertEq(winner, BIDDER2);
-     422                 :            :             assertEq(winningAuctionNumber, 1);
-     423                 :            :         }
-     424                 :            :         // Check inexistant winner
-     425                 :            :         {
-     426                 :            :             (bool hasWinner, address winner, uint128 winningAuctionNumber) = FLA.findFinalizedAuctionWinnerAtAuction(1,VALIDATOR1, OPPORTUNITY3);
-     427                 :            :             assertEq(hasWinner, false);
-     428                 :            :             assertEq(winner, address(0));
-     429                 :            :             assertEq(winningAuctionNumber, 1);
-     430                 :            :         }
-     431                 :            : 
-     432                 :            :     }
-     433                 :            : 
-     434                 :            :     function _approveAndSubmitBid(address who, Bid memory bid) internal {
-     435                 :            :         vm.startPrank(who);
-     436                 :            :         wMatic.approve(address(FLA), 2**256 - 1);
-     437                 :            :         FLA.submitBid(bid);
-     438                 :            :         vm.stopPrank();
-     439                 :            :     }
-     440                 :            : 
-     441                 :            :     function testValidatorWithdrawals() public {
-     442                 :            :         vm.startPrank(OWNER);
-     443                 :            : 
-     444                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     445                 :            :         FLA.enableValidatorAddress(VALIDATOR1);
-     446                 :            : 
-     447                 :            :         FLA.startAuction();
-     448                 :            : 
-     449                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY3);
-     450                 :            :         FLA.enableValidatorAddress(VALIDATOR3);
-     451                 :            : 
-     452                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY4);
-     453                 :            :         FLA.enableValidatorAddress(VALIDATOR4);
-     454                 :            : 
-     455                 :            :         FLA.endAuction();
-     456                 :            :         FLA.startAuction();
-     457                 :            : 
-     458                 :            :         assertTrue(FLA.auction_number() == 2);
-     459                 :            : 
-     460                 :            :         vm.stopPrank();
-     461                 :            :        
-     462                 :            :         
-     463                 :            :         Bid memory auctionRightMinimumBidWithSearcher = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment());
-     464                 :            :         Bid memory auctionRightOutbidsTopBidderFirstPair = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER2, SEARCHER_ADDRESS2, FLA.bid_increment() * 2);
-     465                 :            : 
-     466                 :            :         Bid memory auction2ndPairMinimumBidWithSearcher = Bid(VALIDATOR3, OPPORTUNITY3, BIDDER3, SEARCHER_ADDRESS3, FLA.bid_increment());
-     467                 :            :         Bid memory auction2ndPairOutbidsTopBidder2ndPair = Bid(VALIDATOR3, OPPORTUNITY3, BIDDER4, SEARCHER_ADDRESS4, FLA.bid_increment() * 2);
-     468                 :            :         
-     469                 :            :         Bid memory auction3rdPairValidator4MinimumBidWithSearcher = Bid(VALIDATOR4, OPPORTUNITY4, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment());
-     470                 :            : 
-     471                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,auctionRightMinimumBidWithSearcher);
-     472                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS2,auctionRightOutbidsTopBidderFirstPair);
-     473                 :            : 
-     474                 :            : 
-     475                 :            :         // That outbit will be claimed later after 
-     476                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS3,auction2ndPairMinimumBidWithSearcher);
-     477                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS4,auction2ndPairOutbidsTopBidder2ndPair);
-     478                 :            : 
-     479                 :            :         // That bid will be claimed partially during an ongoing auction 
-     480                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,auction3rdPairValidator4MinimumBidWithSearcher);
-     481                 :            : 
-     482                 :            : 
-     483                 :            :         vm.prank(BIDDER3);
-     484                 :            :         vm.expectRevert(FastLaneEvents.PermissionMustBeValidator.selector);
-     485                 :            :         FLA.redeemOutstandingBalance(BIDDER3);
-     486                 :            : 
-     487                 :            :         // Try to get the cash before the end
-     488                 :            :         vm.prank(VALIDATOR1);
-     489                 :            :         vm.expectRevert(FastLaneEvents.InequalityNothingToRedeem.selector);
-     490                 :            : 
-     491                 :            :         FLA.redeemOutstandingBalance(VALIDATOR1);
-     492                 :            : 
-     493                 :            :         vm.prank(OWNER);
-     494                 :            :         FLA.endAuction();
-     495                 :            : 
-     496                 :            :         // Now we can claim
-     497                 :            :         vm.startPrank(VALIDATOR1);
-     498                 :            :         ValidatorBalanceCheckpoint memory vCheck = FLA.getCheckpoint(VALIDATOR1);
-     499                 :            :         vm.expectEmit(true, true, true, true, address(FLA));
-     500                 :            :         emit ValidatorWithdrawnBalance(VALIDATOR1, 3, vCheck.pendingBalanceAtlastBid, VALIDATOR1, VALIDATOR1);
-     501                 :            :         FLA.redeemOutstandingBalance(VALIDATOR1);
-     502                 :            :         assertTrue(wMatic.balanceOf(VALIDATOR1) == vCheck.pendingBalanceAtlastBid);
-     503                 :            : 
-     504                 :            :         // Only once
-     505                 :            :         vm.expectRevert(FastLaneEvents.InequalityNothingToRedeem.selector);
-     506                 :            : 
-     507                 :            :         FLA.redeemOutstandingBalance(VALIDATOR1);
-     508                 :            : 
-     509                 :            :         vm.stopPrank();
-     510                 :            :         vm.prank(OWNER);
-     511                 :            : 
-     512                 :            :         // We go again and bid on a validator that didn't redeem anything the previous auction
-     513                 :            :         FLA.startAuction();
-     514                 :            : 
-     515                 :            :         
-     516                 :            :         // This moves pendingBalanceAtlastBid to outstandingBalance, before setting a new pendingBalanceAtlastBid
-     517                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS3,auction2ndPairMinimumBidWithSearcher);
-     518                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS4,auction2ndPairOutbidsTopBidder2ndPair);
-     519                 :            : 
-     520                 :            :         // Bidding again on an unclaimed yet pair, and trying to claim for this validator now
-     521                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,auction3rdPairValidator4MinimumBidWithSearcher);
-     522                 :            : 
-     523                 :            :         // Claim while the auction still goes on for auction3rdPairValidator4MinimumBidWithSearcher
-     524                 :            :         vm.startPrank(VALIDATOR4);
-     525                 :            :         ValidatorBalanceCheckpoint memory vCheckOngoing = FLA.getCheckpoint(VALIDATOR4);
-     526                 :            :         vm.expectEmit(true, true, true, true, address(FLA));
-     527                 :            :         emit ValidatorWithdrawnBalance(VALIDATOR4, 3, vCheckOngoing.outstandingBalance, VALIDATOR4, VALIDATOR4);
-     528                 :            :         FLA.redeemOutstandingBalance(VALIDATOR4);
-     529                 :            :         assertTrue(wMatic.balanceOf(VALIDATOR4) == vCheckOngoing.outstandingBalance);
-     530                 :            : 
-     531                 :            :         vm.stopPrank();
-     532                 :            :         vm.prank(OWNER);
-     533                 :            :         FLA.endAuction();
-     534                 :            : 
-     535                 :            :         // Now we can claim
-     536                 :            :         vm.startPrank(VALIDATOR3);
-     537                 :            :         ValidatorBalanceCheckpoint memory vCheckLate = FLA.getCheckpoint(VALIDATOR3);
-     538                 :            :         vm.expectEmit(true, true, true, true, address(FLA));
-     539                 :            :         emit ValidatorWithdrawnBalance(VALIDATOR3, 4, vCheckLate.pendingBalanceAtlastBid + vCheckLate.outstandingBalance, VALIDATOR3, VALIDATOR3);
-     540                 :            :         FLA.redeemOutstandingBalance(VALIDATOR3);
-     541                 :            :         assertTrue(wMatic.balanceOf(VALIDATOR3) == vCheckLate.pendingBalanceAtlastBid + vCheckLate.outstandingBalance);
-     542                 :            : 
-     543                 :            :         // Only once
-     544                 :            :         vm.expectRevert(FastLaneEvents.InequalityNothingToRedeem.selector);
-     545                 :            : 
-     546                 :            :         FLA.redeemOutstandingBalance(VALIDATOR1);
-     547                 :            : 
-     548                 :            :         // Finish draining validator4 so everyone is paid
-     549                 :            :         FLA.redeemOutstandingBalance(VALIDATOR4);
-     550                 :            :         assertTrue(wMatic.balanceOf(address(FLA)) == 0); // Everyone got paid, no more wMatic hanging in the contract
-     551                 :            :     }
-     552                 :            : 
-     553                 :            :     function testBidIncrement() public {
-     554                 :            :         vm.startPrank(OWNER);
-     555                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     556                 :            :         FLA.enableValidatorAddress(VALIDATOR1);
-     557                 :            :         FLA.setMinimumBidIncrement(1000*10**18);
-     558                 :            :         FLA.startAuction();
-     559                 :            :         Bid memory bidTooLow = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, 100);
-     560                 :            :         vm.stopPrank();
-     561                 :            :         vm.startPrank(bidTooLow.searcherPayableAddress);
-     562                 :            :         wMatic.approve(address(FLA), 2**256 - 1);
-     563                 :            :         vm.expectRevert(FastLaneEvents.InequalityTooLow.selector);
-     564                 :            :         FLA.submitBid(bidTooLow);
-     565                 :            :         vm.stopPrank();
-     566                 :            :         vm.prank(OWNER);
-     567                 :            :         FLA.setMinimumBidIncrement(99);
-     568                 :            :         vm.startPrank(bidTooLow.searcherPayableAddress);
-     569                 :            :         FLA.submitBid(bidTooLow);
-     570                 :            :     }
-     571                 :            : 
-     572                 :            :     function testEnabledDisabledPairs() public {
-     573                 :            :         vm.startPrank(OWNER);
-     574                 :            : 
-     575                 :            :         // Enabling disabling opp or validator during auction not live
-     576                 :            :         // Should be no problem
-     577                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     578                 :            :         vm.expectEmit(true, true, false, false, address(FLA));
-     579                 :            :         emit OpportunityAddressDisabled(OPPORTUNITY1, 1);
-     580                 :            :         FLA.disableOpportunityAddress(OPPORTUNITY1);
-     581                 :            : 
-     582                 :            : 
-     583                 :            : 
-     584                 :            :         // Disabling unseen opportunity should revert
-     585                 :            :         vm.expectRevert(FastLaneEvents.PermissionInvalidOpportunityAddress.selector);
-     586                 :            :         FLA.disableOpportunityAddress(OPPORTUNITY4);
-     587                 :            : 
-     588                 :            :         // Re-enable 1 while not live
-     589                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     590                 :            : 
-     591                 :            :         FLA.enableValidatorAddress(VALIDATOR1);
-     592                 :            : 
-     593                 :            :         vm.expectRevert(FastLaneEvents.PermissionMustBeValidator.selector);
-     594                 :            :         FLA.disableValidatorAddress(VALIDATOR2);
-     595                 :            : 
-     596                 :            : 
-     597                 :            :         // Auction is now live, disables should be delayed
-     598                 :            :         FLA.startAuction();
-     599                 :            : 
-     600                 :            :         vm.expectEmit(true, true, false, false, address(FLA));
-     601                 :            :         emit OpportunityAddressDisabled(OPPORTUNITY1, 2);
-     602                 :            :         FLA.disableOpportunityAddress(OPPORTUNITY1);
-     603                 :            : 
-     604                 :            :         vm.expectEmit(true, true, false, false, address(FLA));
-     605                 :            :         emit ValidatorAddressDisabled(VALIDATOR1, 2);
-     606                 :            :         FLA.disableValidatorAddress(VALIDATOR1);
-     607                 :            : 
-     608                 :            :         // Should still be able to bid and outbid
-     609                 :            :         Bid memory auctionRightMinimumBidWithSearcher = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment());
-     610                 :            :         Bid memory auctionRightOutbidsTopBidderFirstPair = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER2, SEARCHER_ADDRESS2, FLA.bid_increment() * 2);
-     611                 :            : 
-     612                 :            :         vm.stopPrank();
-     613                 :            : 
-     614                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,auctionRightMinimumBidWithSearcher);
-     615                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS2,auctionRightOutbidsTopBidderFirstPair);
-     616                 :            : 
-     617                 :            : 
-     618                 :            :         vm.startPrank(OWNER);
-     619                 :            :         FLA.endAuction();
-     620                 :            :         FLA.startAuction();
-     621                 :            : 
-     622                 :            :         // Not anymore
-     623                 :            :         vm.stopPrank();
-     624                 :            :         vm.startPrank(SEARCHER_ADDRESS1);
-     625                 :            :         vm.expectRevert(FastLaneEvents.InequalityValidatorDisabledAtTime.selector);
-     626                 :            :         FLA.submitBid(auctionRightMinimumBidWithSearcher);
-     627                 :            : 
-     628                 :            :         vm.stopPrank();
-     629                 :            :         vm.startPrank(OWNER);
-     630                 :            : 
-     631                 :            : 
-     632                 :            :         assertTrue(FLA.auction_number() == 2);
-     633                 :            : 
-     634                 :            :         // Doesn't impact validator collecting
-     635                 :            :         ValidatorBalanceCheckpoint memory vCheck = FLA.getCheckpoint(VALIDATOR1);
-     636                 :            : 
-     637                 :            :         FLA.redeemOutstandingBalance(VALIDATOR1);
-     638                 :            :         assertTrue(wMatic.balanceOf(VALIDATOR1) == vCheck.pendingBalanceAtlastBid);
-     639                 :            :         
-     640                 :            : 
-     641                 :            :         vm.stopPrank();
-     642                 :            :         vm.startPrank(SEARCHER_ADDRESS1);
-     643                 :            :         vm.expectRevert(FastLaneEvents.InequalityValidatorDisabledAtTime.selector);
-     644                 :            :         FLA.submitBid(auctionRightMinimumBidWithSearcher);
-     645                 :            : 
-     646                 :            :         // Re-enable while live
-     647                 :            :         vm.stopPrank();
-     648                 :            :         vm.startPrank(OWNER);
-     649                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     650                 :            :         FLA.enableValidatorAddress(VALIDATOR1);
-     651                 :            : 
-     652                 :            :         // Should still be locked until next auction
-     653                 :            :         vm.stopPrank();
-     654                 :            :         vm.startPrank(SEARCHER_ADDRESS1);
-     655                 :            :         vm.expectRevert(FastLaneEvents.InequalityValidatorNotEnabledYet.selector);
-     656                 :            : 
-     657                 :            :         FLA.submitBid(auctionRightMinimumBidWithSearcher);
-     658                 :            : 
-     659                 :            :         vm.stopPrank();
-     660                 :            :         vm.startPrank(OWNER);
-     661                 :            :         FLA.endAuction();
-     662                 :            :         FLA.startAuction();
-     663                 :            : 
-     664                 :            :         // Now we can submit again
-     665                 :            :         vm.stopPrank();
-     666                 :            :         vm.prank(SEARCHER_ADDRESS1);
-     667                 :            :         FLA.submitBid(auctionRightMinimumBidWithSearcher);
-     668                 :            : 
-     669                 :            :         vm.startPrank(OWNER);
-     670                 :            :         FLA.disableOpportunityAddress(OPPORTUNITY1);
-     671                 :            :         FLA.endAuction();
-     672                 :            :         FLA.startAuction();
-     673                 :            :         
-     674                 :            :         vm.stopPrank();
-     675                 :            :         vm.prank(SEARCHER_ADDRESS1);
-     676                 :            :         vm.expectRevert(FastLaneEvents.InequalityOpportunityDisabledAtTime.selector);
-     677                 :            : 
-     678                 :            :         FLA.submitBid(auctionRightMinimumBidWithSearcher);
-     679                 :            : 
-     680                 :            :         vm.prank(OWNER);
-     681                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     682                 :            :         vm.prank(SEARCHER_ADDRESS1);
-     683                 :            :         vm.expectRevert(FastLaneEvents.InequalityOpportunityNotEnabledYet.selector);
-     684                 :            : 
-     685                 :            :         FLA.submitBid(auctionRightMinimumBidWithSearcher);
-     686                 :            : 
-     687                 :            :     }
-     688                 :            : 
-     689                 :            :     function testPausedState() public {
-     690                 :            :         vm.startPrank(OWNER);
-     691                 :            :         vm.expectEmit(true, true, false, false, address(FLA));
-     692                 :            :         emit PausedStateSet(true);
-     693                 :            :         FLA.setPausedState(true);
-     694                 :            :         FLA.startAuction();
-     695                 :            :         vm.expectRevert(FastLaneEvents.PermissionPaused.selector);
-     696                 :            :         Bid memory auctionRightMinimumBidWithSearcher = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, 2000*10**18);
-     697                 :            :         FLA.submitBid(auctionRightMinimumBidWithSearcher);
-     698                 :            :     }
-     699                 :            : 
-     700                 :            :     function testValidatorPreferences() public {
-     701                 :            :         vm.startPrank(OWNER);
-     702                 :            :         
-     703                 :            :         uint24 fee = 50000*2; // 10%
-     704                 :            :         FLA.setFastlaneFee(fee);
-     705                 :            : 
-     706                 :            :         address validatorPayable = 0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf;
-     707                 :            :         uint128 amount = 3000*10**18;
-     708                 :            :         vm.expectEmit(true, true, false, false, address(FLA));
-     709                 :            :         emit ValidatorAddressEnabled(VALIDATOR1, 1);
-     710                 :            :         FLA.enableValidatorAddressWithPreferences(VALIDATOR1, amount, validatorPayable);
-     711                 :            : 
-     712                 :            :         vm.expectEmit(true, true, true, false, address(FLA));
-     713                 :            :         emit ValidatorPreferencesSet(VALIDATOR1, amount, validatorPayable);
-     714                 :            :         FLA.enableValidatorAddressWithPreferences(VALIDATOR1, amount, validatorPayable);
-     715                 :            : 
-     716                 :            :         vm.stopPrank();
-     717                 :            : 
-     718                 :            :         vm.prank(BIDDER1);
-     719                 :            :         vm.expectRevert(FastLaneEvents.PermissionMustBeValidator.selector);
-     720                 :            :         FLA.setValidatorPreferences(0, address(0));
-     721                 :            : 
-     722                 :            : 
-     723                 :            :         vm.startPrank(VALIDATOR1);
-     724                 :            :         address validatorPayableUpdated = 0x8e5f4552091a69125d5DfCb7B8C2659029395Bdf;
-     725                 :            :         uint128 updatedAmountTooLow = 4000;
-     726                 :            :         vm.expectRevert(FastLaneEvents.InequalityTooLow.selector);
-     727                 :            :         FLA.setValidatorPreferences(updatedAmountTooLow, validatorPayableUpdated);
-     728                 :            : 
-     729                 :            :         uint128 updatedAmount = 5000*10**18;
-     730                 :            : 
-     731                 :            :         vm.expectRevert(FastLaneEvents.InequalityAddressMismatch.selector);
-     732                 :            :         FLA.setValidatorPreferences(updatedAmount, address(FLA));
-     733                 :            : 
-     734                 :            : 
-     735                 :            :         vm.expectEmit(true, true, true, false, address(FLA));
-     736                 :            :         emit ValidatorPreferencesSet(VALIDATOR1, updatedAmount, validatorPayableUpdated);
-     737                 :            :         FLA.setValidatorPreferences(updatedAmount, validatorPayableUpdated);
-     738                 :            : 
-     739                 :            :         // Now make a bid
-     740                 :            :         vm.stopPrank();
-     741                 :            :         vm.startPrank(OWNER);
-     742                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-     743                 :            :         FLA.startAuction();
-     744                 :            :         vm.stopPrank();
-     745                 :            :         Bid memory auctionRightMinimumBidWithSearcher = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment());
-     746                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,auctionRightMinimumBidWithSearcher);
-     747                 :            : 
-     748                 :            :         vm.startPrank(OWNER);
-     749                 :            :         FLA.endAuction();
-     750                 :            :         FLA.redeemOutstandingBalance(VALIDATOR1);
-     751                 :            :         assertTrue(wMatic.balanceOf(validatorPayableUpdated) == 9000000000000000000);
-     752                 :            :     }
-     753                 :            : 
-     754                 :            :     // Avoid foundry stack too deep
-     755                 :            :     function _splitTestGelatoPreStartChecker() internal {
-     756                 :            :                 {
-     757                 :            :          (bool canExec, bytes memory execPayload) = FLA.checker();
-     758                 :            : 
-     759                 :            :          assertTrue(canExec == false);
-     760                 :            :          assertTrue(execPayload.length == 0); 
-     761                 :            :         }
-     762                 :            : 
-     763                 :            : 
-     764                 :            :          FLA.startAuction();
-     765                 :            :          FLA.endAuction(); // auction_index == 2
-     766                 :            : 
-     767                 :            :         {
-     768                 :            :          (bool canExec, bytes memory execPayload) = FLA.checker();
-     769                 :            : 
-     770                 :            :          assertTrue(canExec == false);
-     771                 :            :          assertTrue(execPayload.length == 0); 
-     772                 :            :         }
-     773                 :            : 
-     774                 :            :          FLA.startAuction();
-     775                 :            : 
-     776                 :            :     }
-     777                 :            :     function testGelatoAutoship() public {
-     778                 :            : 
-     779                 :            :         // Pump SEARCHER_ADDRESS1 balances since he'll be bidding on all validators
-     780                 :            :         vm.deal(SEARCHER_ADDRESS1,1000000*10**18);
-     781                 :            :         vm.prank(SEARCHER_ADDRESS1);
-     782                 :            :         wMatic.deposit{value: 1000000*10**18}();
-     783                 :            : 
-     784                 :            :         vm.startPrank(OWNER);
-     785                 :            :         uint24 fee = 0; // 0% so calculations are easier
-     786                 :            :         FLA.setFastlaneFee(fee);
-     787                 :            :         uint128 minAutoship = 2000 * (10**18);
-     788                 :            :         FLA.setMinimumAutoShipThreshold(minAutoship);
-     789                 :            :         // Force 2 payments per checker() call max
-     790                 :            :         FLA.setAutopayBatchSize(2);
-     791                 :            :         // First validator setup with enableValidatorAddressWithPreferences
-     792                 :            :         address validatorPayable1 = vm.addr(1);
-     793                 :            :         uint128 amount1 = minAutoship;
-     794                 :            :         FLA.enableValidatorAddressWithPreferences(VALIDATOR1, amount1, validatorPayable1);
-     795                 :            : 
-     796                 :            :         // 2nd validator setup with enableValidatorAddressWithPreferences as himself
-     797                 :            :         uint128 amount2 = minAutoship*2;
-     798                 :            :         FLA.enableValidatorAddressWithPreferences(VALIDATOR2, amount2, VALIDATOR2);
-     799                 :            : 
-     800                 :            :         // 3rd set up without autoship originally then adds it himself
-     801                 :            :         FLA.enableValidatorAddress(VALIDATOR3);
-     802                 :            :          uint128 amount3 = minAutoship*3;
-     803                 :            :          address validatorPayable3 = vm.addr(3);
-     804                 :            :          vm.stopPrank();
-     805                 :            :          vm.prank(VALIDATOR3);
-     806                 :            :          FLA.setValidatorPreferences(amount3, validatorPayable3);
-     807                 :            : 
-     808                 :            :          // 4th didn't ask for anything, he'll get default autoship
-     809                 :            :          vm.startPrank(OWNER);
-     810                 :            :          FLA.enableValidatorAddress(VALIDATOR4);
-     811                 :            :          
-     812                 :            :          // Now the opp
-     813                 :            :          FLA.enableOpportunityAddress(OPPORTUNITY1);
-     814                 :            :         
-     815                 :            :         _splitTestGelatoPreStartChecker(); // auction_index == 2
-     816                 :            : 
-     817                 :            :          vm.stopPrank();
-     818                 :            :          // Validator 1 will get his threshold met directly
-     819                 :            :          Bid memory bid1 = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, amount1);
-     820                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,bid1);
-     821                 :            : 
-     822                 :            :          // Validator 2 will get his threshold met in 2 steps
-     823                 :            :          Bid memory bid2 = Bid(VALIDATOR2, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, amount2/2);
-     824                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,bid2);
-     825                 :            : 
-     826                 :            :          // Validator 3 will get his threshold met directly
-     827                 :            :          Bid memory bid3 = Bid(VALIDATOR3, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, amount3);
-     828                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,bid3);
-     829                 :            : 
-     830                 :            :          // Validator 4 will get his threshold met directly
-     831                 :            :          Bid memory bid4 = Bid(VALIDATOR4, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, minAutoship);
-     832                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,bid4);
-     833                 :            : 
-     834                 :            :         // Check validatorsactiveAtAuctionRound
-     835                 :            :         {
-     836                 :            :         address[] memory prevRoundAddrs = FLA.getValidatorsactiveAtAuctionRound(2);
-     837                 :            : 
-     838                 :            :         // Should have 4 validators active
-     839                 :            :         assertEq(prevRoundAddrs.length,4);
-     840                 :            :         }
-     841                 :            : 
-     842                 :            : 
-     843                 :            :         // Verify checker still doesn't run
-     844                 :            :         {
-     845                 :            :          (bool canExecR1, bytes memory execPayloadR1) = FLA.checker();
-     846                 :            : 
-     847                 :            :          assertTrue(canExecR1 == false);
-     848                 :            :          assertTrue(execPayloadR1.length == 0); 
-     849                 :            :         }
-     850                 :            :         // Turn off checker
-     851                 :            : 
-     852                 :            :         vm.startPrank(OWNER);
-     853                 :            :         FLA.setOffchainCheckerDisabledState(true);
-     854                 :            :         FLA.endAuction(); // auction_index == 3
-     855                 :            :         FLA.startAuction();
-     856                 :            : 
-     857                 :            :         // Verify checker still doesn't run even if it could from balances
-     858                 :            :         {
-     859                 :            :          (bool canExecR2, bytes memory execPayloadR2) = FLA.checker();
-     860                 :            : 
-     861                 :            :          assertTrue(canExecR2 == false);
-     862                 :            :          assertTrue(execPayloadR2.length == 0); 
-     863                 :            :         }
-     864                 :            : 
-     865                 :            :         // New bid on new auction_number so balances of VALIDATOR1 are moved to outstanding.
-     866                 :            :         // Should not impact anything
-     867                 :            :         vm.stopPrank();
-     868                 :            :          _approveAndSubmitBid(SEARCHER_ADDRESS1,bid1);
-     869                 :            :         vm.startPrank(OWNER);
-     870                 :            :         // Turn it back on and witness payments of 2
-     871                 :            :         FLA.setOffchainCheckerDisabledState(false);
-     872                 :            : 
-     873                 :            :         {
-     874                 :            :             ValidatorBalanceCheckpoint memory vCheckOngoing = FLA.getCheckpoint(VALIDATOR1);
-     875                 :            :             assertTrue(vCheckOngoing.outstandingBalance >= amount1);
-     876                 :            :         }
-     877                 :            : 
-     878                 :            :         {
-     879                 :            :         (bool hasJobs,) = FLA.getAutopayJobs(2, 2);
-     880                 :            :         assertEq(hasJobs, true);
-     881                 :            :         }
-     882                 :            : 
-     883                 :            :         (bool canExec, bytes memory execPayload) = FLA.checker();
-     884                 :            : 
-     885                 :            :          assertTrue(canExec == true);
-     886                 :            :          assertTrue(execPayload.length > 0);
-     887                 :            :         
-     888                 :            : 
-     889                 :            :         vm.stopPrank();
-     890                 :            :         vm.startPrank(OPS_ADDRESS);
-     891                 :            :         {
-     892                 :            :         // Validator 1 and 3 should have been autoshipped
-     893                 :            :         vm.expectEmit(true, true, true, true, address(FLA));
-     894                 :            :         emit ValidatorWithdrawnBalance(VALIDATOR1, 3, 2000 * (10**18), vm.addr(1), OPS_ADDRESS);
-     895                 :            :         
-     896                 :            :         vm.expectEmit(true, true, true, true, address(FLA));
-     897                 :            :         emit ValidatorWithdrawnBalance(VALIDATOR3, 3, 6000 * (10**18), vm.addr(3), OPS_ADDRESS);
-     898                 :            : 
-     899                 :            : 
-     900                 :            :         (bool success,) = address(FLA).call(execPayload);
-     901                 :            :          assertTrue(success);
-     902                 :            :         }
-     903                 :            :     
-     904                 :            :         // Call it again and witness payment of 1
-     905                 :            :         {
-     906                 :            :             (bool hasJobs4,) = FLA.getAutopayJobs(2, 2);
-     907                 :            :             assertEq(hasJobs4, true);
-     908                 :            : 
-     909                 :            :             (bool canExec4, bytes memory execPayload4) = FLA.checker();
-     910                 :            : 
-     911                 :            :              assertTrue(canExec4 == true);
-     912                 :            :              assertTrue(execPayload4.length > 0);
-     913                 :            :             // Validator 4 will get autoship
-     914                 :            :             vm.expectEmit(true, true, true, true, address(FLA));
-     915                 :            :             emit ValidatorWithdrawnBalance(VALIDATOR4, 3, 2000 * (10**18), VALIDATOR4, OPS_ADDRESS);
-     916                 :            : 
-     917                 :            :             (bool success,) = address(FLA).call(execPayload4);
-     918                 :            :             assertTrue(success);
-     919                 :            : 
-     920                 :            :             // No more folks to handle
-     921                 :            :             (bool canExec5,) = FLA.checker();
-     922                 :            :             assertTrue(canExec5 == false);
-     923                 :            :         }
-     924                 :            : 
-     925                 :            : 
-     926                 :            :     }
-     927                 :            : 
-     928                 :            :     function testRedeemableOutstanding() public {
-     929                 :            : 
-     930                 :            :         // Pump SEARCHER_ADDRESS1 balances since he'll be bidding on all validators
-     931                 :            :         vm.deal(SEARCHER_ADDRESS1,1000000*10**18);
-     932                 :            :         vm.prank(SEARCHER_ADDRESS1);
-     933                 :            :         wMatic.deposit{value: 1000000*10**18}();
-     934                 :            : 
-     935                 :            :         vm.startPrank(OWNER);
-     936                 :            :         uint24 fee = 0; // 0% so calculations are easier
-     937                 :            :         FLA.setFastlaneFee(fee);
-     938                 :            :         uint128 minAutoship = 2000 * (10**18);
-     939                 :            :         FLA.setMinimumAutoShipThreshold(minAutoship);
-     940                 :            :         // Force 2 payments per checker() call max
-     941                 :            :         FLA.setAutopayBatchSize(2);
-     942                 :            :         // First validator setup with enableValidatorAddressWithPreferences
-     943                 :            :         address validatorPayable1 = vm.addr(1);
-     944                 :            :         uint128 amount1 = minAutoship;
-     945                 :            :         FLA.enableValidatorAddressWithPreferences(VALIDATOR1, amount1, validatorPayable1);
-     946                 :            : 
-     947                 :            :         // 2nd validator setup with enableValidatorAddressWithPreferences as himself
-     948                 :            :         uint128 amount2 = minAutoship*2; // Autoship at 4k
-     949                 :            :         FLA.enableValidatorAddressWithPreferences(VALIDATOR2, amount2, VALIDATOR2);
-     950                 :            : 
-     951                 :            :          // Now the opp
-     952                 :            :          FLA.enableOpportunityAddress(OPPORTUNITY1);
-     953                 :            :         
-     954                 :            :         _splitTestGelatoPreStartChecker(); // auction_index == 2
-     955                 :            : 
-     956                 :            :          vm.stopPrank();
-     957                 :            :          // Validator 1 will get his threshold met directly
-     958                 :            :          Bid memory bid1 = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, amount1);
-     959                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,bid1);
-     960                 :            : 
-     961                 :            :          // Validator 2 will get his threshold met in 2 steps
-     962                 :            :          Bid memory bid2 = Bid(VALIDATOR2, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, amount2/2);
-     963                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,bid2);
-     964                 :            : 
-     965                 :            :         // Check validatorsactiveAtAuctionRound
-     966                 :            :         {
-     967                 :            :         address[] memory prevRoundAddrs = FLA.getValidatorsactiveAtAuctionRound(2);
-     968                 :            : 
-     969                 :            :         // Should have 2 validators active
-     970                 :            :         assertEq(prevRoundAddrs.length,2);
-     971                 :            :         }
-     972                 :            : 
-     973                 :            : 
-     974                 :            :         // Verify checker still doesn't run
-     975                 :            :         {
-     976                 :            :          (bool canExec1, bytes memory execPayload1) = FLA.checker();
-     977                 :            : 
-     978                 :            :          assertTrue(canExec1 == false);
-     979                 :            :          assertTrue(execPayload1.length == 0); 
-     980                 :            :         }
-     981                 :            : 
-     982                 :            :         (bool hasJobs, address[] memory autopayRecipients) = FLA.getAutopayJobs(2, 2);
-     983                 :            :         assertEq(hasJobs, false);
-     984                 :            :         assertEq(autopayRecipients[0],address(0));
-     985                 :            :         assertEq(autopayRecipients[1],address(0));
-     986                 :            : 
-     987                 :            :         vm.startPrank(OWNER);
-     988                 :            :         FLA.endAuction(); // auction_index == 3
-     989                 :            :         FLA.startAuction();
-     990                 :            : 
-     991                 :            :         {
-     992                 :            :             ValidatorBalanceCheckpoint memory vCheckOngoing = FLA.getCheckpoint(VALIDATOR1);
-     993                 :            :             assertEq(vCheckOngoing.pendingBalanceAtlastBid, amount1);
-     994                 :            :         }
-     995                 :            : 
-     996                 :            :         {
-     997                 :            :             ValidatorPreferences memory valPrefs = FLA.getPreferences(VALIDATOR2);
-     998                 :            :             assertEq(valPrefs.minAutoshipAmount, 4000 * (10**18));
-     999                 :            : 
-    1000                 :            :             ValidatorBalanceCheckpoint memory vCheckOngoing = FLA.getCheckpoint(VALIDATOR2);
-    1001                 :            :             assertEq(vCheckOngoing.pendingBalanceAtlastBid, amount2/2);
-    1002                 :            :             assertEq(vCheckOngoing.outstandingBalance, 0);
-    1003                 :            :             // Forge coverage being drunk ? Says checkRedeemableOutstanding never branches out
-    1004                 :            :             // Making _checkRedeemableOutstanding -> checkRedeemableOutstanding (public) and testing
-    1005                 :            :             // both variations still trips out coverage
-    1006                 :            :             // bool isRedeemable = FLA.checkRedeemableOutstanding(vCheckOngoing, valPrefs.minAutoshipAmount);
-    1007                 :            :             // assertEq(isRedeemable, false);
-    1008                 :            :         }
-    1009                 :            : 
-    1010                 :            : 
-    1011                 :            : 
-    1012                 :            :         
-    1013                 :            :         (hasJobs, autopayRecipients) = FLA.getAutopayJobs(2, 2);
-    1014                 :            :         assertEq(hasJobs, true);
-    1015                 :            :         assertEq(autopayRecipients[0],VALIDATOR1);
-    1016                 :            :         assertEq(autopayRecipients[1],address(0));
-    1017                 :            :         
-    1018                 :            : 
-    1019                 :            :         (bool canExec, bytes memory execPayload) = FLA.checker();
-    1020                 :            : 
-    1021                 :            :          assertTrue(canExec == true);
-    1022                 :            :          assertTrue(execPayload.length > 0);
-    1023                 :            :         
-    1024                 :            : 
-    1025                 :            :         vm.stopPrank();
-    1026                 :            :         vm.startPrank(OPS_ADDRESS);
-    1027                 :            :         {
-    1028                 :            :         // Validator 1 should have been autoshipped
-    1029                 :            :         vm.expectEmit(true, true, true, true, address(FLA));
-    1030                 :            :         emit ValidatorWithdrawnBalance(VALIDATOR1, 3, 2000 * (10**18), vm.addr(1), OPS_ADDRESS);
-    1031                 :            :         
-    1032                 :            :         (bool success,) = address(FLA).call(execPayload);
-    1033                 :            :          assertTrue(success);
-    1034                 :            :         }
-    1035                 :            : 
-    1036                 :            :         (hasJobs,autopayRecipients) = FLA.getAutopayJobs(2, 2);
-    1037                 :            :         assertEq(hasJobs, false);
-    1038                 :            :         assertEq(autopayRecipients[0],address(0));
-    1039                 :            :         assertEq(autopayRecipients[1],address(0));
-    1040                 :            : 
-    1041                 :            :         vm.stopPrank();
-    1042                 :            :         vm.startPrank(OWNER);
-    1043                 :            :         FLA.endAuction();
-    1044                 :            :         FLA.startAuction();
-    1045                 :            :         vm.stopPrank();
-    1046                 :            : 
-    1047                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,bid2);
-    1048                 :            : 
-    1049                 :            :         (hasJobs,autopayRecipients) = FLA.getAutopayJobs(2, 2);
-    1050                 :            :         assertEq(hasJobs, false);
-    1051                 :            :         assertEq(autopayRecipients[0],address(0));
-    1052                 :            :         assertEq(autopayRecipients[1],address(0));
-    1053                 :            : 
-    1054                 :            :         vm.startPrank(OWNER);
-    1055                 :            :         FLA.endAuction();
-    1056                 :            :         FLA.startAuction();
-    1057                 :            : 
-    1058                 :            :         (hasJobs,autopayRecipients) = FLA.getAutopayJobs(2, 2);
-    1059                 :            :         assertEq(hasJobs, true);
-    1060                 :            :         assertEq(autopayRecipients[0],VALIDATOR2);
-    1061                 :            :         assertEq(autopayRecipients[1],address(0));
-    1062                 :            : 
-    1063                 :            :         {
-    1064                 :            :             ValidatorBalanceCheckpoint memory vCheckOngoing = FLA.getCheckpoint(VALIDATOR2);
-    1065                 :            :             assertEq(vCheckOngoing.pendingBalanceAtlastBid, amount2/2);
-    1066                 :            :             assertEq(vCheckOngoing.outstandingBalance, amount2/2);
-    1067                 :            :             // bool isRedeemable = FLA.checkRedeemableOutstanding(vCheckOngoing, 4000*10**18);
-    1068                 :            :             // assertEq(isRedeemable, true);
-    1069                 :            :         }
-    1070                 :            : 
-    1071                 :            :         (canExec, execPayload) = FLA.checker();
-    1072                 :            : 
-    1073                 :            :          assertTrue(canExec == true);
-    1074                 :            :          assertTrue(execPayload.length > 0);
-    1075                 :            :         
-    1076                 :            : 
-    1077                 :            :         vm.stopPrank();
-    1078                 :            :         vm.startPrank(OPS_ADDRESS);
-    1079                 :            :         {
-    1080                 :            :         // Validator 2 should have been autoshipped
-    1081                 :            :         vm.expectEmit(true, true, true, true, address(FLA));
-    1082                 :            :         emit ValidatorWithdrawnBalance(VALIDATOR2, 5, 4000 * (10**18), VALIDATOR2, OPS_ADDRESS);
-    1083                 :            :         
-    1084                 :            :         (bool success,) = address(FLA).call(execPayload);
-    1085                 :            :          assertTrue(success);
-    1086                 :            :         }
-    1087                 :            : 
-    1088                 :            :     }
-    1089                 :            : 
-    1090                 :            :     function testReinitSetup() public {
-    1091                 :            :         vm.expectRevert(FastLaneEvents.TimeAlreadyInit.selector);
-    1092                 :            :         vm.prank(OWNER);
-    1093                 :            :         FLA.initialSetupAuction(vm.addr(1),OPS_ADDRESS, VALIDATOR2);
-    1094                 :            :     }
-    1095                 :            : 
-    1096                 :            :     function testAutoshipThreshold() public {
-    1097                 :            :         vm.startPrank(OWNER);
-    1098                 :            :         uint128 minAutoship = 10000*10**18;
-    1099                 :            :         vm.expectEmit(true, false, false, false, address(FLA));
-    1100                 :            :         emit MinimumAutoshipThresholdSet(minAutoship);
-    1101                 :            :         FLA.setMinimumAutoShipThreshold(minAutoship);
-    1102                 :            :     }
-    1103                 :            : 
-    1104                 :            :     function testGasChecker() public {
-    1105                 :            : 
-    1106                 :            :         // Pump SEARCHER_ADDRESS1 balances since he'll be bidding on all validators
-    1107                 :            :         vm.deal(SEARCHER_ADDRESS1,1000000*10**18);
-    1108                 :            :         vm.prank(SEARCHER_ADDRESS1);
-    1109                 :            :         wMatic.deposit{value: 1000000*10**18}();
-    1110                 :            : 
-    1111                 :            :         vm.startPrank(OWNER);
-    1112                 :            :         uint24 fee = 0; // 0% so calculations are easier
-    1113                 :            :         FLA.setFastlaneFee(fee);
-    1114                 :            :         uint128 minAutoship = 2000 * (10**18);
-    1115                 :            :         FLA.setMinimumAutoShipThreshold(minAutoship);
-    1116                 :            :         // Force 2 payments per checker() call max
-    1117                 :            :         FLA.setAutopayBatchSize(2);
-    1118                 :            :         // First validator setup with enableValidatorAddressWithPreferences
-    1119                 :            :         address validatorPayable1 = vm.addr(1);
-    1120                 :            :         uint128 amount1 = minAutoship;
-    1121                 :            :         FLA.enableValidatorAddressWithPreferences(VALIDATOR1, amount1, validatorPayable1);
-    1122                 :            : 
-    1123                 :            :         // Now the opp
-    1124                 :            :          FLA.enableOpportunityAddress(OPPORTUNITY1);
-    1125                 :            :         
-    1126                 :            :         _splitTestGelatoPreStartChecker(); // auction_index == 2
-    1127                 :            : 
-    1128                 :            :          vm.stopPrank();
-    1129                 :            :          // Validator 1 will get his threshold met directly
-    1130                 :            :          Bid memory bid1 = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, amount1);
-    1131                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,bid1);
-    1132                 :            : 
-    1133                 :            :         // Check validatorsactiveAtAuctionRound
-    1134                 :            :         {
-    1135                 :            :         address[] memory prevRoundAddrs = FLA.getValidatorsactiveAtAuctionRound(2);
-    1136                 :            : 
-    1137                 :            :         // Should have 1 validator active
-    1138                 :            :         assertEq(prevRoundAddrs.length,1);
-    1139                 :            :         }
-    1140                 :            : 
-    1141                 :            : 
-    1142                 :            :         // Verify checker still doesn't run
-    1143                 :            :         {
-    1144                 :            :          (bool canExecR1, bytes memory execPayloadR1) = FLA.checker();
-    1145                 :            : 
-    1146                 :            :          assertTrue(canExecR1 == false);
-    1147                 :            :          assertTrue(execPayloadR1.length == 0); 
-    1148                 :            :         }
-    1149                 :            :         // Turn off checker with gas
-    1150                 :            : 
-    1151                 :            :         vm.startPrank(OWNER);
-    1152                 :            :         vm.expectEmit(true, false, false, false, address(FLA));
-    1153                 :            :         emit ResolverMaxGasPriceSet(0);
-    1154                 :            :         FLA.setResolverMaxGasPrice(0);
-    1155                 :            :         
-    1156                 :            :         FLA.endAuction(); // auction_index == 3
-    1157                 :            :         FLA.startAuction();
-    1158                 :            : 
-    1159                 :            :         vm.expectEmit(true, false, false, false, address(FLA));
-    1160                 :            :         emit OpsSet(vm.addr(1337));
-    1161                 :            :         FLA.setOps(vm.addr(1337));
-    1162                 :            :         vm.stopPrank();
-    1163                 :            : 
-    1164                 :            :         vm.startPrank(vm.addr(1337));
-    1165                 :            :         // Verify checker still doesn't run even if it could from balances
-    1166                 :            :         (bool canExec, bytes memory execPayload) = FLA.checker();
-    1167                 :            : 
-    1168                 :            :         assertTrue(canExec == false);
-    1169                 :            :         assertTrue(execPayload.length == 0);
-    1170                 :            : 
-    1171                 :            :         address[] memory recipients = new address[](2);
-    1172                 :            :         recipients[1] = vm.addr(1);
-    1173                 :            :         vm.expectRevert(FastLaneEvents.TimeGasNotSuitable.selector);
-    1174                 :            : 
-    1175                 :            :         FLA.processAutopayJobs(recipients);
-    1176                 :            :         
-    1177                 :            :         vm.stopPrank();
-    1178                 :            :         vm.prank(OWNER);
-    1179                 :            :         FLA.setResolverMaxGasPrice(10*10**18);
-    1180                 :            : 
-    1181                 :            :         vm.startPrank(vm.addr(1337));
-    1182                 :            :         (canExec, execPayload) = FLA.checker();
-    1183                 :            :         assertTrue(canExec == true);
-    1184                 :            :     }
-    1185                 :            : 
-    1186                 :            :     function testEmergencyWithdraw() public {
-    1187                 :            :         vm.deal(address(FLA),10*10**18);
-    1188                 :            :         
-    1189                 :            :         vm.startPrank(OWNER);
-    1190                 :            :         vm.expectEmit(true, true, false, false, address(FLA));
-    1191                 :            :         emit WithdrawStuckNativeToken(OWNER, 10*10**18);
-    1192                 :            :         FLA.withdrawStuckNativeToken(10*10**18);
-    1193                 :            :         assertEq(OWNER.balance, 10*10**18);
-    1194                 :            : 
-    1195                 :            :         MockERC20 token = new MockERC20("Token", "TKN", 18);
-    1196                 :            :         token.mint(address(FLA), 1e18);
-    1197                 :            : 
-    1198                 :            :         vm.expectEmit(true, true, true, false, address(FLA));
-    1199                 :            :         emit WithdrawStuckERC20(address(FLA), OWNER, 1e18);
-    1200                 :            :         FLA.withdrawStuckERC20(address(token));
-    1201                 :            :         assertEq(token.balanceOf(OWNER), 1e18);
-    1202                 :            :         assertEq(token.balanceOf(address(FLA)), 0);
-    1203                 :            : 
-    1204                 :            :         vm.expectRevert(FastLaneEvents.InequalityWrongToken.selector);
-    1205                 :            :         FLA.withdrawStuckERC20(address(wMatic));
-    1206                 :            :     }
-    1207                 :            : 
-    1208                 :            :     function testBidToken() public {
-    1209                 :            :         vm.startPrank(OWNER);
-    1210                 :            :         address badToken = address(0);
-    1211                 :            :         vm.expectRevert(FastLaneEvents.GeneralFailure.selector);
-    1212                 :            :         FLA.setBidToken(badToken);
-    1213                 :            :     }
-    1214                 :            : 
-    1215                 :            :     function testFeeUpdate() public {
-    1216                 :            :         vm.startPrank(OWNER);
-    1217                 :            :         uint24 abusiveFee = 1300000;
-    1218                 :            :         vm.expectRevert(FastLaneEvents.InequalityTooHigh.selector);
-    1219                 :            :         FLA.setFastlaneFee(abusiveFee);
-    1220                 :            : 
-    1221                 :            :         uint24 fee = 50000*2; // 10%
-    1222                 :            :         FLA.setFastlaneFee(fee);
-    1223                 :            : 
-    1224                 :            :         FLA.enableValidatorAddress(VALIDATOR1);
-    1225                 :            :         FLA.enableOpportunityAddress(OPPORTUNITY1);
-    1226                 :            :         FLA.startAuction();
-    1227                 :            :         vm.stopPrank();
-    1228                 :            :         Bid memory auctionRightMinimumBidWithSearcher = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment());
-    1229                 :            :         _approveAndSubmitBid(SEARCHER_ADDRESS1,auctionRightMinimumBidWithSearcher);
-    1230                 :            : 
-    1231                 :            :         vm.startPrank(OWNER);
-    1232                 :            :         FLA.endAuction();
-    1233                 :            : 
-    1234                 :            :         // Check checkpoint and cuts
-    1235                 :            :         ValidatorBalanceCheckpoint memory vCheck = FLA.getCheckpoint(VALIDATOR1);
-    1236                 :            :         (uint256 vCut, uint256 pflCut) = _calculateCuts(auctionRightMinimumBidWithSearcher.bidAmount,FLA.fast_lane_fee());
-    1237                 :            : 
-    1238                 :            :         assertTrue(vCheck.pendingBalanceAtlastBid == vCut);
-    1239                 :            :         assertTrue(vCheck.outstandingBalance == 0);
-    1240                 :            :         assertTrue(vCheck.lastWithdrawnAuction == 0);
-    1241                 :            :         assertTrue(vCheck.lastBidReceivedAuction == 1);
-    1242                 :            : 
-    1243                 :            :         FLA.redeemOutstandingBalance(VALIDATOR1);
-    1244                 :            : 
-    1245                 :            :         vCheck = FLA.getCheckpoint(VALIDATOR1);
-    1246                 :            :         assertTrue(vCheck.pendingBalanceAtlastBid == 0);
-    1247                 :            :         assertTrue(vCheck.outstandingBalance == 0);
-    1248                 :            :         assertTrue(vCheck.lastWithdrawnAuction == 2);
-    1249                 :            :         assertTrue(vCheck.lastBidReceivedAuction == 1);
-    1250                 :            : 
-    1251                 :            :         assertTrue(wMatic.balanceOf(VALIDATOR1) == vCut);
-    1252                 :            :         assertTrue(wMatic.balanceOf(VALIDATOR1) == 9000000000000000000);
-    1253                 :            :         assertTrue(wMatic.balanceOf(OWNER) == 1000000000000000000);
-    1254                 :            :         assertTrue(wMatic.balanceOf(OWNER) == pflCut);
-    1255                 :            : 
-    1256                 :            :     }
-    1257                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/legacy-test/index-sort-b.html b/report/test/legacy-test/index-sort-b.html deleted file mode 100644 index 47abcdd..0000000 --- a/report/test/legacy-test/index-sort-b.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - test/legacy-test - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test/legacy-testHitTotalCoverage
Test:lcov.infoLines:0270.0 %
Date:2023-09-07 01:01:29Functions:030.0 %
Branches:020.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
PFLAuction.t.sol -
0.0%
-
0.0 %0 / 270.0 %0 / 30.0 %0 / 2
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/legacy-test/index-sort-f.html b/report/test/legacy-test/index-sort-f.html deleted file mode 100644 index e5d3238..0000000 --- a/report/test/legacy-test/index-sort-f.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - test/legacy-test - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test/legacy-testHitTotalCoverage
Test:lcov.infoLines:0270.0 %
Date:2023-09-07 01:01:29Functions:030.0 %
Branches:020.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
PFLAuction.t.sol -
0.0%
-
0.0 %0 / 270.0 %0 / 30.0 %0 / 2
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/legacy-test/index-sort-l.html b/report/test/legacy-test/index-sort-l.html deleted file mode 100644 index 729a28e..0000000 --- a/report/test/legacy-test/index-sort-l.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - test/legacy-test - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test/legacy-testHitTotalCoverage
Test:lcov.infoLines:0270.0 %
Date:2023-09-07 01:01:29Functions:030.0 %
Branches:020.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
PFLAuction.t.sol -
0.0%
-
0.0 %0 / 270.0 %0 / 30.0 %0 / 2
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/legacy-test/index.html b/report/test/legacy-test/index.html deleted file mode 100644 index d77b4e7..0000000 --- a/report/test/legacy-test/index.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - test/legacy-test - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test/legacy-testHitTotalCoverage
Test:lcov.infoLines:0270.0 %
Date:2023-09-07 01:01:29Functions:030.0 %
Branches:020.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
PFLAuction.t.sol -
0.0%
-
0.0 %0 / 270.0 %0 / 30.0 %0 / 2
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/mocks/MockPaymentProcessor.sol.func-sort-c.html b/report/test/mocks/MockPaymentProcessor.sol.func-sort-c.html deleted file mode 100644 index 9c7b43e..0000000 --- a/report/test/mocks/MockPaymentProcessor.sol.func-sort-c.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - LCOV - lcov.info - test/mocks/MockPaymentProcessor.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test/mocks - MockPaymentProcessor.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:55100.0 %
Date:2023-09-07 01:01:29Functions:11100.0 %
Branches:00-
-
- -
- - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
MockPaymentProcessor.payValidator1
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/mocks/MockPaymentProcessor.sol.func.html b/report/test/mocks/MockPaymentProcessor.sol.func.html deleted file mode 100644 index 91a8b7a..0000000 --- a/report/test/mocks/MockPaymentProcessor.sol.func.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - LCOV - lcov.info - test/mocks/MockPaymentProcessor.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test/mocks - MockPaymentProcessor.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:55100.0 %
Date:2023-09-07 01:01:29Functions:11100.0 %
Branches:00-
-
- -
- - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
MockPaymentProcessor.payValidator1
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/mocks/MockPaymentProcessor.sol.gcov.html b/report/test/mocks/MockPaymentProcessor.sol.gcov.html deleted file mode 100644 index f6b5159..0000000 --- a/report/test/mocks/MockPaymentProcessor.sol.gcov.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - LCOV - lcov.info - test/mocks/MockPaymentProcessor.sol - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test/mocks - MockPaymentProcessor.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:55100.0 %
Date:2023-09-07 01:01:29Functions:11100.0 %
Branches:00-
-
- - - - - - - - -

-
           Branch data     Line data    Source code
-
-       1                 :            : //SPDX-License-Identifier: MIT
-       2                 :            : pragma solidity ^0.8.16;
-       3                 :            : 
-       4                 :            : import {IPaymentProcessor} from "../../contracts/interfaces/IPaymentProcessor.sol";
-       5                 :            : 
-       6                 :            : contract MockPaymentProcessor is IPaymentProcessor {
-       7                 :            : 
-       8                 :            :     uint256 public startBlock;
-       9                 :            :     uint256 public endBlock;
-      10                 :            :     uint256 public totalAmount;
-      11                 :            :     uint256 public customAllocation;
-      12                 :            :     address public validator;
-      13                 :            : 
-      14                 :            :     function payValidator(
-      15                 :            :         uint256 _startBlock,
-      16                 :            :         uint256 _endBlock,
-      17                 :            :         uint256 _totalAmount,
-      18                 :            :         uint256 _customAllocation,
-      19                 :            :         bytes calldata _data
-      20                 :            :     ) external payable {
-      21                 :            :         // Checking all data passed correctly to PaymentProcessor,
-      22                 :            :         // Including the validator address decoded from data
-      23                 :          1 :         validator = abi.decode(_data, (address));
-      24                 :          1 :         totalAmount = _totalAmount;
-      25                 :          1 :         customAllocation = _customAllocation;
-      26                 :          1 :         startBlock = _startBlock;
-      27                 :          1 :         endBlock = _endBlock;
-      28                 :            :     }
-      29                 :            : }
-
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/mocks/index-sort-b.html b/report/test/mocks/index-sort-b.html deleted file mode 100644 index 6b720dc..0000000 --- a/report/test/mocks/index-sort-b.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - test/mocks - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test/mocksHitTotalCoverage
Test:lcov.infoLines:55100.0 %
Date:2023-09-07 01:01:29Functions:11100.0 %
Branches:00-
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
MockPaymentProcessor.sol -
100.0%
-
100.0 %5 / 5100.0 %1 / 1-0 / 0
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/mocks/index-sort-f.html b/report/test/mocks/index-sort-f.html deleted file mode 100644 index 7ac8436..0000000 --- a/report/test/mocks/index-sort-f.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - test/mocks - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test/mocksHitTotalCoverage
Test:lcov.infoLines:55100.0 %
Date:2023-09-07 01:01:29Functions:11100.0 %
Branches:00-
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
MockPaymentProcessor.sol -
100.0%
-
100.0 %5 / 5100.0 %1 / 1-0 / 0
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/mocks/index-sort-l.html b/report/test/mocks/index-sort-l.html deleted file mode 100644 index 7133cac..0000000 --- a/report/test/mocks/index-sort-l.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - test/mocks - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test/mocksHitTotalCoverage
Test:lcov.infoLines:55100.0 %
Date:2023-09-07 01:01:29Functions:11100.0 %
Branches:00-
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
MockPaymentProcessor.sol -
100.0%
-
100.0 %5 / 5100.0 %1 / 1-0 / 0
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/test/mocks/index.html b/report/test/mocks/index.html deleted file mode 100644 index cf3c230..0000000 --- a/report/test/mocks/index.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - test/mocks - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - test/mocksHitTotalCoverage
Test:lcov.infoLines:55100.0 %
Date:2023-09-07 01:01:29Functions:11100.0 %
Branches:00-
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
MockPaymentProcessor.sol -
100.0%
-
100.0 %5 / 5100.0 %1 / 1-0 / 0
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/report/updown.png b/report/updown.png deleted file mode 100644 index aa56a238b3e6c435265250f9266cd1b8caba0f20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^AT}Qd8;}%R+`Ae`*?77*hG?8mPH5^{)z4*}Q$iB}huR`+ diff --git a/test/legacy-test/PFLAuction.t.sol b/test/legacy-test/PFLAuction.t.sol deleted file mode 100644 index b4334b9..0000000 --- a/test/legacy-test/PFLAuction.t.sol +++ /dev/null @@ -1,1257 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.15; - -import "forge-std/Test.sol"; -import "forge-std/console.sol"; -import "forge-std/console2.sol"; - -import "contracts/legacy/FastLaneLegacyAuction.sol"; - -import "openzeppelin-contracts/contracts/utils/Strings.sol"; -import "openzeppelin-contracts/contracts/utils/Address.sol"; -import "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; - -import "contracts/interfaces/IWMatic.sol"; - -import { MockERC20 } from "solmate/test/utils/mocks/MockERC20.sol"; - - -// 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889 - Mumbai WMATIC -// 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270 - Polygon Mainnet WMATIC - -abstract contract PFLHelper is Test, FastLaneEvents { - - using Address for address payable; - FastLaneLegacyAuction public FLA; - address constant MUMBAI_MATIC = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889; - address constant OPS_ADDRESS = address(0xBEEF); - WMATIC public wMatic; - - address public OWNER = 0xa401DCcD23DCdbc7296bDfb8A6c8d61106711CA6; - - address public BIDDER1 = 0xc71E2Df87C93bC3Ddba80e14406F3880E3D19D3e; - - address public BIDDER2 = 0x174237f20a0925d5eFEA401e5279181f0b7515EE; - address public BIDDER3 = 0xFba52cDB2B36eCc27ac229b8feb2455B6aE3014b; - address public BIDDER4 = 0xc4208Be0F01C8DBB57D0269887ccD5D269dEFf3B; - - address public VALIDATOR1 = 0x8149d8a0aCE8c058a679a1Fd4257aA1F1d2b9103; - address public VALIDATOR2 = 0x161c3421Da27CD26E3c46Eb5711743343d17352d; - address public VALIDATOR3 = 0x60d86bBFD061A359fd3B3E6Ef422b74B886f9a4a; - address public VALIDATOR4 = 0x68F248c6B7820B191E4ed18c3d618ba7aC527C99; - - address public OPPORTUNITY1 = 0x8af6F6CA42171fc823619AC33a9A6C1892CA980B; - address public OPPORTUNITY2 = 0x6eD132ea309B432FD49C9e70bc4F8Da429022F77; - address public OPPORTUNITY3 = 0x8fcB7fb5e84847029Ba3e055BE46b86a4693AE40; - address public OPPORTUNITY4 = 0x29D59575e85282c05112BEEC53fFadE66d3c7CD1; - - address public BROKE_BIDDER = 0xD057089743dc1461b1099Dee7A8CB848E361f6d9; - address public BROKE_SEARCHER = 0xD057089743dc1461b1099Dee7A8CB848E361f6d9; - - address public SEARCHER_ADDRESS1 = 0x14BA06E061ada0443dbE5c7617A529Dd791c3146; - address public SEARCHER_ADDRESS2 = 0x428a87F9c0ed1Bb9cdCE42f606e030ba40a525f3; - address public SEARCHER_ADDRESS3 = 0x791e001586B75B8880bC6D02f2Ee19D42ec23E18; - address public SEARCHER_ADDRESS4 = 0x4BF8fC74846da2dc54cCfd1f4fFac595939399e4; - - address public REFUND_RECIPIENT = 0xFdE9601264EBB3B664B7E37E9D3487D8fabB9001; - - address[] public BIDDERS = [BIDDER1, BIDDER2, BIDDER3, BIDDER4]; - - address[] public SEARCHERS = [SEARCHER_ADDRESS1, SEARCHER_ADDRESS2, SEARCHER_ADDRESS3, SEARCHER_ADDRESS4]; - - address[] public VALIDATORS = [ - VALIDATOR1, - VALIDATOR2, - VALIDATOR3, - VALIDATOR4 - ]; - address[] public OPPORTUNITIES = [ - OPPORTUNITY1, - OPPORTUNITY2, - OPPORTUNITY3, - OPPORTUNITY4 - ]; - - constructor() {} - - // function logReads(address addr) public { - // (bytes32[] memory reads, bytes32[] memory writes) = vm.accesses( - // address(addr) - // ); - // for (uint256 i; i < reads.length; i++) { - // emit log_uint(uint256(reads[i])); - // } - // } - - function _calculateCuts(uint256 amount,uint256 fee) internal pure returns (uint256 vCut, uint256 flCut) { - vCut = (amount * (1000000 - fee)) / 1000000; - flCut = amount - vCut; - } - - function setUpMaticAndFastlane(bool noAuction) public returns (address) { - // Obtained from - // emit log_bytes(bytecode); of vm.getCode("Wmatic.sol") - bytes memory bytecode = hex"60c0604052600d60808190527f57726170706564204d617469630000000000000000000000000000000000000060a090815261003e91600091906100a3565b506040805180820190915260068082527f574d4154494300000000000000000000000000000000000000000000000000006020909201918252610083916001916100a3565b506002805460ff1916601217905534801561009d57600080fd5b5061013e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100e457805160ff1916838001178555610111565b82800160010185558215610111579182015b828111156101115782518255916020019190600101906100f6565b5061011d929150610121565b5090565b61013b91905b8082111561011d5760008155600101610127565b90565b6106568061014d6000396000f3006080604052600436106100925760003560e01c63ffffffff16806306fdde031461009c578063095ea7b31461012657806318160ddd1461015e57806323b872dd146101855780632e1a7d4d146101af578063313ce567146101c757806370a08231146101f257806395d89b4114610213578063a9059cbb14610228578063d0e30db014610092578063dd62ed3e1461024c575b61009a610273565b005b3480156100a857600080fd5b506100b16102c2565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100eb5781810151838201526020016100d3565b50505050905090810190601f1680156101185780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561013257600080fd5b5061014a600160a060020a0360043516602435610350565b604080519115158252519081900360200190f35b34801561016a57600080fd5b506101736103b6565b60408051918252519081900360200190f35b34801561019157600080fd5b5061014a600160a060020a03600435811690602435166044356103bb565b3480156101bb57600080fd5b5061009a6004356104ef565b3480156101d357600080fd5b506101dc610584565b6040805160ff9092168252519081900360200190f35b3480156101fe57600080fd5b50610173600160a060020a036004351661058d565b34801561021f57600080fd5b506100b161059f565b34801561023457600080fd5b5061014a600160a060020a03600435166024356105f9565b34801561025857600080fd5b50610173600160a060020a036004358116906024351661060d565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103485780601f1061031d57610100808354040283529160200191610348565b820191906000526020600020905b81548152906001019060200180831161032b57829003601f168201915b505050505081565b336000818152600460209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b303190565b600160a060020a0383166000908152600360205260408120548211156103e057600080fd5b600160a060020a038416331480159061041e5750600160a060020a038416600090815260046020908152604080832033845290915290205460001914155b1561047e57600160a060020a038416600090815260046020908152604080832033845290915290205482111561045357600080fd5b600160a060020a03841660009081526004602090815260408083203384529091529020805483900390555b600160a060020a03808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561050b57600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f1935050505015801561054a573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103485780601f1061031d57610100808354040283529160200191610348565b60006106063384846103bb565b9392505050565b6004602090815260009283526040808420909152908252902054815600a165627a7a723058206118e6580df80a8af43aaa932ff4545b6c57ca46d1b8c249807304c1f63050280029"; - - address maticAddress; - assembly { - maticAddress := create(0, add(bytecode, 0x20), mload(bytecode)) - } - vm.etch(MUMBAI_MATIC, maticAddress.code); - - vm.prank(OWNER); - - if (noAuction == false) { - FLA = new FastLaneLegacyAuction(OWNER); - - vm.prank(OWNER); - FLA.initialSetupAuction(MUMBAI_MATIC, OPS_ADDRESS, OWNER); - return address(FLA); - } - - return address(0); - } - - function setUpBiddersSearchersWallets() public { - wMatic = WMATIC(MUMBAI_MATIC); - - for (uint256 i = 0; i < BIDDERS.length; i++) { - address currentBidder = BIDDERS[i]; - address currentSearcher = SEARCHERS[i]; - vm.label(currentBidder,string.concat("BIDDER",Strings.toString(i+1))); - vm.label(currentSearcher,string.concat("SEARCHER",Strings.toString(i+1))); - uint256 soonWMaticBidder = (10 ether * (i + 1)); - uint256 soonWMaticSearcher = (33 ether * (i + 1)); - - vm.deal(currentBidder, soonWMaticBidder + 1); - vm.deal(currentSearcher, soonWMaticSearcher + 1); - - vm.prank(currentBidder); - wMatic.deposit{value: soonWMaticBidder}(); - vm.prank(currentSearcher); - wMatic.deposit{value: soonWMaticSearcher}(); - // console2.log( - // "[amount Bidder] :", - // i+1, - // " -> ", - // wMatic.balanceOf(currentBidder) - // ); - // console2.log( - // "[amount Searcher] :", - // i+1, - // " -> ", - // wMatic.balanceOf(currentSearcher) - // ); - } - } -} -contract PFLAuctionTest is PFLHelper { - - - - function setUp() public { - - - setUpMaticAndFastlane(false); - setUpBiddersSearchersWallets(); - // address owner = FLA.owner(); - // console2.log("FLA OWNER:", owner); - - - // console2.log("FLA deployed at:", address(FLA)); - // console2.log("WMATIC deployed at:", MUMBAI_MATIC); - - - } - - function testStartStopNoBidAuction() public { - console2.log("Sender", msg.sender); - vm.startPrank(OWNER); - // vm.record(); - - FLA.startAuction(); - FLA.endAuction(); - - assertTrue(FLA.auction_number() == 2); - assertEq(FLA.getActivePrivilegesAuctionNumber(), 1); - - address starter = vm.addr(420); - vm.expectEmit(true, false, false, false); - emit AuctionStarterSet(starter); - FLA.setStarter(starter); - - vm.stopPrank(); - vm.expectRevert(FastLaneEvents.PermissionNotOwnerNorStarter.selector); - FLA.startAuction(); - - vm.startPrank(starter); - - FLA.startAuction(); - FLA.endAuction(); - - assertTrue(FLA.auction_number() == 3); - assertEq(FLA.getActivePrivilegesAuctionNumber(), 2); - } - - function testStartProcessStopMultipleEmptyAuctions() public { - vm.startPrank(OWNER); - // vm.record(); - - vm.expectEmit(true, true, false, false); - emit OpportunityAddressEnabled(OPPORTUNITY1,1); - FLA.enableOpportunityAddress(OPPORTUNITY1); - - vm.expectEmit(true, true, false, false); - emit ValidatorAddressEnabled(VALIDATOR1, 1); - FLA.enableValidatorAddress(VALIDATOR1); - - FLA.startAuction(); - // Now live, delay to next - vm.expectEmit(true, true, false, false); - emit OpportunityAddressEnabled(OPPORTUNITY2,2); - FLA.enableOpportunityAddress(OPPORTUNITY2); - - vm.expectEmit(true, true, false, false); - emit ValidatorAddressEnabled(VALIDATOR2, 2); - FLA.enableValidatorAddress(VALIDATOR2); - - FLA.endAuction(); - - FLA.startAuction(); - FLA.endAuction(); - - assertTrue(FLA.auction_number() == 3); - } - function testValidatorCheckpoint() public { - vm.startPrank(OWNER); - - FLA.enableOpportunityAddress(OPPORTUNITY1); - FLA.enableValidatorAddress(VALIDATOR1); - - ValidatorBalanceCheckpoint memory vCheck = FLA.getCheckpoint(VALIDATOR1); - - assertTrue(vCheck.pendingBalanceAtlastBid == 0); - assertTrue(vCheck.outstandingBalance == 0); - assertTrue(vCheck.lastWithdrawnAuction == 0); - assertTrue(vCheck.lastBidReceivedAuction == 0); - - Status memory st = FLA.getStatus(OPPORTUNITY1); - assertTrue(st.activeAtAuctionRound == 1); - assertTrue(st.inactiveAtAuctionRound == FLA.MAX_AUCTION_VALUE()); - assertTrue(st.kind == statusType.OPPORTUNITY); - - FLA.startAuction(); - FLA.enableValidatorAddress(VALIDATOR2); - Status memory stVal2 = FLA.getStatus(VALIDATOR2); - - assertTrue(stVal2.activeAtAuctionRound == 2); - assertTrue(stVal2.inactiveAtAuctionRound == FLA.MAX_AUCTION_VALUE()); - assertTrue(stVal2.kind == statusType.VALIDATOR); - - } - - function testStartProcessSingleOutBidAuction() public { - vm.startPrank(OWNER); - - FLA.enableOpportunityAddress(OPPORTUNITY1); - FLA.enableValidatorAddress(VALIDATOR1); - - FLA.startAuction(); - - vm.stopPrank(); - vm.startPrank(BIDDER1); - - // Bid { validatorAddress - opportunityAddress - searcherContractAddress - searcherPayableAddress - bidAmount} - Bid memory auctionWrongSearchableBid = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, BIDDER2, 11*10**18); - Bid memory auctionWrongOpportunityBid = Bid(VALIDATOR1, OPPORTUNITY2, BIDDER1, BIDDER1, 11*10**18); - Bid memory auctionWrongValidatorBid = Bid(VALIDATOR2, OPPORTUNITY1, BIDDER1, BIDDER1, 11*10**18); - Bid memory auctionWrongIncrementBid = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, BIDDER1, 8*10**18); - - Bid memory auctionRightMinimumBidWithSearcher = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment()); - - Bid memory auctionWrongDoubleSelfBidWithSearcherTooLow = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment() + 1); - Bid memory auctionWrongDoubleSelfBidWithSearcherEnough = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment() * 2); - - Bid memory auctionWrongBrokeBidderBidTooLow = Bid(VALIDATOR1, OPPORTUNITY1, BROKE_BIDDER, BROKE_BIDDER, 8*10**18); - Bid memory auctionWrongBrokeBidderBidEnough = Bid(VALIDATOR1, OPPORTUNITY1, BROKE_BIDDER, BROKE_BIDDER, FLA.bid_increment() * 2); - - // Bid memory auctionWrongBrokeSearcherBid = Bid(VALIDATOR1, OPPORTUNITY1, BROKE_BIDDER, BROKE_SEARCHER, 8*10**18); - - Bid memory auctionRightOutbidsTopBidderFirstPair = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER2, SEARCHER_ADDRESS2, FLA.bid_increment() * 2); - - // Bid should be coming from EOA that's paying aka BIDDER1 from line 186. - vm.expectRevert(FastLaneEvents.PermissionOnlyFromPayorEoa.selector); - FLA.submitBid(auctionWrongSearchableBid); - - // Attempts to bid from OPPORTUNITY2 which has not been enabled yet - vm.expectRevert(FastLaneEvents.PermissionMustBeValidator.selector); - FLA.submitBid(auctionWrongValidatorBid); - - vm.expectRevert(FastLaneEvents.PermissionInvalidOpportunityAddress.selector); - FLA.submitBid(auctionWrongOpportunityBid); - - vm.expectRevert(FastLaneEvents.InequalityTooLow.selector); - FLA.submitBid(auctionWrongIncrementBid); - - vm.stopPrank(); // Not BIDDER1 anymore - - vm.startPrank(auctionRightMinimumBidWithSearcher.searcherPayableAddress); - - // Missing approval - vm.expectRevert(bytes("TRANSFER_FROM_FAILED")); - FLA.submitBid(auctionRightMinimumBidWithSearcher); - - // Approve as the Payable - wMatic.approve(address(FLA), 2**256 - 1); - - // First correct bid - uint balanceBefore = wMatic.balanceOf(auctionRightMinimumBidWithSearcher.searcherPayableAddress); - - vm.expectEmit(true, true, true, true, address(FLA)); - emit BidAdded(BIDDER1, VALIDATOR1, OPPORTUNITY1, FLA.bid_increment(), 1); - // Check event - FLA.submitBid(auctionRightMinimumBidWithSearcher); - - // Check Top Bid - { - (uint256 topBidAmount, uint128 currentAuctionNumber) = FLA.findLiveAuctionTopBid(VALIDATOR1, OPPORTUNITY1); - assertEq(topBidAmount, FLA.bid_increment()); - assertEq(currentAuctionNumber, 1); - } - - // Check checkpoint and cuts - ValidatorBalanceCheckpoint memory vCheck = FLA.getCheckpoint(VALIDATOR1); - - (uint256 vCut,uint256 flCut) = _calculateCuts(auctionRightMinimumBidWithSearcher.bidAmount, FLA.fast_lane_fee()); - assertTrue(vCheck.pendingBalanceAtlastBid == vCut); - assertTrue(vCheck.outstandingBalance == 0); - assertTrue(vCheck.lastWithdrawnAuction == 0); - assertTrue(vCheck.lastBidReceivedAuction == 1); - - assertTrue(FLA.outstandingFLBalance() == flCut); - - // Check balances - assertEq(wMatic.balanceOf(auctionRightMinimumBidWithSearcher.searcherPayableAddress), balanceBefore - auctionRightMinimumBidWithSearcher.bidAmount); - assertEq(wMatic.balanceOf(address(FLA)), auctionRightMinimumBidWithSearcher.bidAmount); - - vm.expectRevert(FastLaneEvents.InequalityTooLow.selector); - FLA.submitBid(auctionWrongDoubleSelfBidWithSearcherTooLow); - - vm.expectRevert(FastLaneEvents.InequalityAlreadyTopBidder.selector); - FLA.submitBid(auctionWrongDoubleSelfBidWithSearcherEnough); - - - vm.stopPrank(); - - // There was a bid valid before of FLA.bid_increment(). - // First we don't top it, then we do, but with an empty bank account. Both reverting. - vm.startPrank(auctionWrongBrokeBidderBidTooLow.searcherPayableAddress); - wMatic.approve(address(FLA), 2**256 - 1); - vm.expectRevert(FastLaneEvents.InequalityTooLow.selector); - FLA.submitBid(auctionWrongBrokeBidderBidTooLow); - - vm.expectRevert(FastLaneEvents.InequalityNotEnoughFunds.selector); - FLA.submitBid(auctionWrongBrokeBidderBidEnough); - - vm.stopPrank(); - - // Beat previous bid from another searcher on same pair - - vm.startPrank(auctionRightOutbidsTopBidderFirstPair.searcherPayableAddress); - - // Approve as the Payable - wMatic.approve(address(FLA), 2**256 - 1); - - - uint balanceBeforeOfFirstBidder = wMatic.balanceOf(auctionRightMinimumBidWithSearcher.searcherPayableAddress); - uint balanceBeforeOfUpcomingBidder = wMatic.balanceOf(auctionRightOutbidsTopBidderFirstPair.searcherPayableAddress); - uint outstandingFLBalanceBeforeOutbidding = FLA.outstandingFLBalance(); - - vm.expectEmit(true, true, true, true, address(FLA)); - emit BidAdded(BIDDER2, VALIDATOR1, OPPORTUNITY1, FLA.bid_increment() * 2, 1); - FLA.submitBid(auctionRightOutbidsTopBidderFirstPair); - - // Check refund since we have an existing bid - uint balanceAfterOfFirstBidder = wMatic.balanceOf(auctionRightMinimumBidWithSearcher.searcherPayableAddress); - // Bidder1 is whole again - assertTrue(balanceAfterOfFirstBidder == balanceBeforeOfFirstBidder + auctionRightMinimumBidWithSearcher.bidAmount); - - // Bidder2 balance was taken - uint balanceAfterOfUpcomingBidder = wMatic.balanceOf(auctionRightOutbidsTopBidderFirstPair.searcherPayableAddress); - assertTrue(balanceAfterOfUpcomingBidder == balanceBeforeOfUpcomingBidder - auctionRightOutbidsTopBidderFirstPair.bidAmount); - - // And into the contract - assertEq(wMatic.balanceOf(address(FLA)), auctionRightOutbidsTopBidderFirstPair.bidAmount); - - // Get updated checkpoint - vCheck = FLA.getCheckpoint(VALIDATOR1); - (uint256 vCut2,uint256 flCut2) = _calculateCuts(auctionRightOutbidsTopBidderFirstPair.bidAmount, FLA.fast_lane_fee()); - assertTrue(vCheck.pendingBalanceAtlastBid == vCut2); - assertTrue(vCheck.outstandingBalance == 0); - assertTrue(vCheck.lastWithdrawnAuction == 0); - assertTrue(vCheck.lastBidReceivedAuction == 1); - - assertTrue(FLA.outstandingFLBalance() == outstandingFLBalanceBeforeOutbidding - flCut + flCut2); - - - vm.stopPrank(); - vm.startPrank(OWNER); - - uint cut = FLA.outstandingFLBalance(); - - // Check Top Bid - { - (uint256 topBidAmount, uint128 currentAuctionNumber) = FLA.findLiveAuctionTopBid(VALIDATOR1, OPPORTUNITY1); - assertEq(topBidAmount, FLA.bid_increment()*2); - assertEq(currentAuctionNumber, 1); - } - FLA.endAuction(); - assertTrue(wMatic.balanceOf(OWNER) == cut); - - // Check Winner - { - (bool hasWinner, address winner, uint128 winningAuctionNumber) = FLA.findFinalizedAuctionWinnerAtAuction(1,VALIDATOR1, OPPORTUNITY1); - assertEq(hasWinner, true); - assertEq(winner, BIDDER2); - assertEq(winningAuctionNumber, 1); - } - { - (bool hasWinner, address winner, uint128 winningAuctionNumber) = FLA.findLastFinalizedAuctionWinner(VALIDATOR1, OPPORTUNITY1); - assertEq(hasWinner, true); - assertEq(winner, BIDDER2); - assertEq(winningAuctionNumber, 1); - } - // Check inexistant winner - { - (bool hasWinner, address winner, uint128 winningAuctionNumber) = FLA.findFinalizedAuctionWinnerAtAuction(1,VALIDATOR1, OPPORTUNITY3); - assertEq(hasWinner, false); - assertEq(winner, address(0)); - assertEq(winningAuctionNumber, 1); - } - - } - - function _approveAndSubmitBid(address who, Bid memory bid) internal { - vm.startPrank(who); - wMatic.approve(address(FLA), 2**256 - 1); - FLA.submitBid(bid); - vm.stopPrank(); - } - - function testValidatorWithdrawals() public { - vm.startPrank(OWNER); - - FLA.enableOpportunityAddress(OPPORTUNITY1); - FLA.enableValidatorAddress(VALIDATOR1); - - FLA.startAuction(); - - FLA.enableOpportunityAddress(OPPORTUNITY3); - FLA.enableValidatorAddress(VALIDATOR3); - - FLA.enableOpportunityAddress(OPPORTUNITY4); - FLA.enableValidatorAddress(VALIDATOR4); - - FLA.endAuction(); - FLA.startAuction(); - - assertTrue(FLA.auction_number() == 2); - - vm.stopPrank(); - - - Bid memory auctionRightMinimumBidWithSearcher = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment()); - Bid memory auctionRightOutbidsTopBidderFirstPair = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER2, SEARCHER_ADDRESS2, FLA.bid_increment() * 2); - - Bid memory auction2ndPairMinimumBidWithSearcher = Bid(VALIDATOR3, OPPORTUNITY3, BIDDER3, SEARCHER_ADDRESS3, FLA.bid_increment()); - Bid memory auction2ndPairOutbidsTopBidder2ndPair = Bid(VALIDATOR3, OPPORTUNITY3, BIDDER4, SEARCHER_ADDRESS4, FLA.bid_increment() * 2); - - Bid memory auction3rdPairValidator4MinimumBidWithSearcher = Bid(VALIDATOR4, OPPORTUNITY4, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment()); - - _approveAndSubmitBid(SEARCHER_ADDRESS1,auctionRightMinimumBidWithSearcher); - _approveAndSubmitBid(SEARCHER_ADDRESS2,auctionRightOutbidsTopBidderFirstPair); - - - // That outbit will be claimed later after - _approveAndSubmitBid(SEARCHER_ADDRESS3,auction2ndPairMinimumBidWithSearcher); - _approveAndSubmitBid(SEARCHER_ADDRESS4,auction2ndPairOutbidsTopBidder2ndPair); - - // That bid will be claimed partially during an ongoing auction - _approveAndSubmitBid(SEARCHER_ADDRESS1,auction3rdPairValidator4MinimumBidWithSearcher); - - - vm.prank(BIDDER3); - vm.expectRevert(FastLaneEvents.PermissionMustBeValidator.selector); - FLA.redeemOutstandingBalance(BIDDER3); - - // Try to get the cash before the end - vm.prank(VALIDATOR1); - vm.expectRevert(FastLaneEvents.InequalityNothingToRedeem.selector); - - FLA.redeemOutstandingBalance(VALIDATOR1); - - vm.prank(OWNER); - FLA.endAuction(); - - // Now we can claim - vm.startPrank(VALIDATOR1); - ValidatorBalanceCheckpoint memory vCheck = FLA.getCheckpoint(VALIDATOR1); - vm.expectEmit(true, true, true, true, address(FLA)); - emit ValidatorWithdrawnBalance(VALIDATOR1, 3, vCheck.pendingBalanceAtlastBid, VALIDATOR1, VALIDATOR1); - FLA.redeemOutstandingBalance(VALIDATOR1); - assertTrue(wMatic.balanceOf(VALIDATOR1) == vCheck.pendingBalanceAtlastBid); - - // Only once - vm.expectRevert(FastLaneEvents.InequalityNothingToRedeem.selector); - - FLA.redeemOutstandingBalance(VALIDATOR1); - - vm.stopPrank(); - vm.prank(OWNER); - - // We go again and bid on a validator that didn't redeem anything the previous auction - FLA.startAuction(); - - - // This moves pendingBalanceAtlastBid to outstandingBalance, before setting a new pendingBalanceAtlastBid - _approveAndSubmitBid(SEARCHER_ADDRESS3,auction2ndPairMinimumBidWithSearcher); - _approveAndSubmitBid(SEARCHER_ADDRESS4,auction2ndPairOutbidsTopBidder2ndPair); - - // Bidding again on an unclaimed yet pair, and trying to claim for this validator now - _approveAndSubmitBid(SEARCHER_ADDRESS1,auction3rdPairValidator4MinimumBidWithSearcher); - - // Claim while the auction still goes on for auction3rdPairValidator4MinimumBidWithSearcher - vm.startPrank(VALIDATOR4); - ValidatorBalanceCheckpoint memory vCheckOngoing = FLA.getCheckpoint(VALIDATOR4); - vm.expectEmit(true, true, true, true, address(FLA)); - emit ValidatorWithdrawnBalance(VALIDATOR4, 3, vCheckOngoing.outstandingBalance, VALIDATOR4, VALIDATOR4); - FLA.redeemOutstandingBalance(VALIDATOR4); - assertTrue(wMatic.balanceOf(VALIDATOR4) == vCheckOngoing.outstandingBalance); - - vm.stopPrank(); - vm.prank(OWNER); - FLA.endAuction(); - - // Now we can claim - vm.startPrank(VALIDATOR3); - ValidatorBalanceCheckpoint memory vCheckLate = FLA.getCheckpoint(VALIDATOR3); - vm.expectEmit(true, true, true, true, address(FLA)); - emit ValidatorWithdrawnBalance(VALIDATOR3, 4, vCheckLate.pendingBalanceAtlastBid + vCheckLate.outstandingBalance, VALIDATOR3, VALIDATOR3); - FLA.redeemOutstandingBalance(VALIDATOR3); - assertTrue(wMatic.balanceOf(VALIDATOR3) == vCheckLate.pendingBalanceAtlastBid + vCheckLate.outstandingBalance); - - // Only once - vm.expectRevert(FastLaneEvents.InequalityNothingToRedeem.selector); - - FLA.redeemOutstandingBalance(VALIDATOR1); - - // Finish draining validator4 so everyone is paid - FLA.redeemOutstandingBalance(VALIDATOR4); - assertTrue(wMatic.balanceOf(address(FLA)) == 0); // Everyone got paid, no more wMatic hanging in the contract - } - - function testBidIncrement() public { - vm.startPrank(OWNER); - FLA.enableOpportunityAddress(OPPORTUNITY1); - FLA.enableValidatorAddress(VALIDATOR1); - FLA.setMinimumBidIncrement(1000*10**18); - FLA.startAuction(); - Bid memory bidTooLow = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, 100); - vm.stopPrank(); - vm.startPrank(bidTooLow.searcherPayableAddress); - wMatic.approve(address(FLA), 2**256 - 1); - vm.expectRevert(FastLaneEvents.InequalityTooLow.selector); - FLA.submitBid(bidTooLow); - vm.stopPrank(); - vm.prank(OWNER); - FLA.setMinimumBidIncrement(99); - vm.startPrank(bidTooLow.searcherPayableAddress); - FLA.submitBid(bidTooLow); - } - - function testEnabledDisabledPairs() public { - vm.startPrank(OWNER); - - // Enabling disabling opp or validator during auction not live - // Should be no problem - FLA.enableOpportunityAddress(OPPORTUNITY1); - vm.expectEmit(true, true, false, false, address(FLA)); - emit OpportunityAddressDisabled(OPPORTUNITY1, 1); - FLA.disableOpportunityAddress(OPPORTUNITY1); - - - - // Disabling unseen opportunity should revert - vm.expectRevert(FastLaneEvents.PermissionInvalidOpportunityAddress.selector); - FLA.disableOpportunityAddress(OPPORTUNITY4); - - // Re-enable 1 while not live - FLA.enableOpportunityAddress(OPPORTUNITY1); - - FLA.enableValidatorAddress(VALIDATOR1); - - vm.expectRevert(FastLaneEvents.PermissionMustBeValidator.selector); - FLA.disableValidatorAddress(VALIDATOR2); - - - // Auction is now live, disables should be delayed - FLA.startAuction(); - - vm.expectEmit(true, true, false, false, address(FLA)); - emit OpportunityAddressDisabled(OPPORTUNITY1, 2); - FLA.disableOpportunityAddress(OPPORTUNITY1); - - vm.expectEmit(true, true, false, false, address(FLA)); - emit ValidatorAddressDisabled(VALIDATOR1, 2); - FLA.disableValidatorAddress(VALIDATOR1); - - // Should still be able to bid and outbid - Bid memory auctionRightMinimumBidWithSearcher = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment()); - Bid memory auctionRightOutbidsTopBidderFirstPair = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER2, SEARCHER_ADDRESS2, FLA.bid_increment() * 2); - - vm.stopPrank(); - - _approveAndSubmitBid(SEARCHER_ADDRESS1,auctionRightMinimumBidWithSearcher); - _approveAndSubmitBid(SEARCHER_ADDRESS2,auctionRightOutbidsTopBidderFirstPair); - - - vm.startPrank(OWNER); - FLA.endAuction(); - FLA.startAuction(); - - // Not anymore - vm.stopPrank(); - vm.startPrank(SEARCHER_ADDRESS1); - vm.expectRevert(FastLaneEvents.InequalityValidatorDisabledAtTime.selector); - FLA.submitBid(auctionRightMinimumBidWithSearcher); - - vm.stopPrank(); - vm.startPrank(OWNER); - - - assertTrue(FLA.auction_number() == 2); - - // Doesn't impact validator collecting - ValidatorBalanceCheckpoint memory vCheck = FLA.getCheckpoint(VALIDATOR1); - - FLA.redeemOutstandingBalance(VALIDATOR1); - assertTrue(wMatic.balanceOf(VALIDATOR1) == vCheck.pendingBalanceAtlastBid); - - - vm.stopPrank(); - vm.startPrank(SEARCHER_ADDRESS1); - vm.expectRevert(FastLaneEvents.InequalityValidatorDisabledAtTime.selector); - FLA.submitBid(auctionRightMinimumBidWithSearcher); - - // Re-enable while live - vm.stopPrank(); - vm.startPrank(OWNER); - FLA.enableOpportunityAddress(OPPORTUNITY1); - FLA.enableValidatorAddress(VALIDATOR1); - - // Should still be locked until next auction - vm.stopPrank(); - vm.startPrank(SEARCHER_ADDRESS1); - vm.expectRevert(FastLaneEvents.InequalityValidatorNotEnabledYet.selector); - - FLA.submitBid(auctionRightMinimumBidWithSearcher); - - vm.stopPrank(); - vm.startPrank(OWNER); - FLA.endAuction(); - FLA.startAuction(); - - // Now we can submit again - vm.stopPrank(); - vm.prank(SEARCHER_ADDRESS1); - FLA.submitBid(auctionRightMinimumBidWithSearcher); - - vm.startPrank(OWNER); - FLA.disableOpportunityAddress(OPPORTUNITY1); - FLA.endAuction(); - FLA.startAuction(); - - vm.stopPrank(); - vm.prank(SEARCHER_ADDRESS1); - vm.expectRevert(FastLaneEvents.InequalityOpportunityDisabledAtTime.selector); - - FLA.submitBid(auctionRightMinimumBidWithSearcher); - - vm.prank(OWNER); - FLA.enableOpportunityAddress(OPPORTUNITY1); - vm.prank(SEARCHER_ADDRESS1); - vm.expectRevert(FastLaneEvents.InequalityOpportunityNotEnabledYet.selector); - - FLA.submitBid(auctionRightMinimumBidWithSearcher); - - } - - function testPausedState() public { - vm.startPrank(OWNER); - vm.expectEmit(true, true, false, false, address(FLA)); - emit PausedStateSet(true); - FLA.setPausedState(true); - FLA.startAuction(); - vm.expectRevert(FastLaneEvents.PermissionPaused.selector); - Bid memory auctionRightMinimumBidWithSearcher = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, 2000*10**18); - FLA.submitBid(auctionRightMinimumBidWithSearcher); - } - - function testValidatorPreferences() public { - vm.startPrank(OWNER); - - uint24 fee = 50000*2; // 10% - FLA.setFastlaneFee(fee); - - address validatorPayable = 0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf; - uint128 amount = 3000*10**18; - vm.expectEmit(true, true, false, false, address(FLA)); - emit ValidatorAddressEnabled(VALIDATOR1, 1); - FLA.enableValidatorAddressWithPreferences(VALIDATOR1, amount, validatorPayable); - - vm.expectEmit(true, true, true, false, address(FLA)); - emit ValidatorPreferencesSet(VALIDATOR1, amount, validatorPayable); - FLA.enableValidatorAddressWithPreferences(VALIDATOR1, amount, validatorPayable); - - vm.stopPrank(); - - vm.prank(BIDDER1); - vm.expectRevert(FastLaneEvents.PermissionMustBeValidator.selector); - FLA.setValidatorPreferences(0, address(0)); - - - vm.startPrank(VALIDATOR1); - address validatorPayableUpdated = 0x8e5f4552091a69125d5DfCb7B8C2659029395Bdf; - uint128 updatedAmountTooLow = 4000; - vm.expectRevert(FastLaneEvents.InequalityTooLow.selector); - FLA.setValidatorPreferences(updatedAmountTooLow, validatorPayableUpdated); - - uint128 updatedAmount = 5000*10**18; - - vm.expectRevert(FastLaneEvents.InequalityAddressMismatch.selector); - FLA.setValidatorPreferences(updatedAmount, address(FLA)); - - - vm.expectEmit(true, true, true, false, address(FLA)); - emit ValidatorPreferencesSet(VALIDATOR1, updatedAmount, validatorPayableUpdated); - FLA.setValidatorPreferences(updatedAmount, validatorPayableUpdated); - - // Now make a bid - vm.stopPrank(); - vm.startPrank(OWNER); - FLA.enableOpportunityAddress(OPPORTUNITY1); - FLA.startAuction(); - vm.stopPrank(); - Bid memory auctionRightMinimumBidWithSearcher = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment()); - _approveAndSubmitBid(SEARCHER_ADDRESS1,auctionRightMinimumBidWithSearcher); - - vm.startPrank(OWNER); - FLA.endAuction(); - FLA.redeemOutstandingBalance(VALIDATOR1); - assertTrue(wMatic.balanceOf(validatorPayableUpdated) == 9000000000000000000); - } - - // Avoid foundry stack too deep - function _splitTestGelatoPreStartChecker() internal { - { - (bool canExec, bytes memory execPayload) = FLA.checker(); - - assertTrue(canExec == false); - assertTrue(execPayload.length == 0); - } - - - FLA.startAuction(); - FLA.endAuction(); // auction_index == 2 - - { - (bool canExec, bytes memory execPayload) = FLA.checker(); - - assertTrue(canExec == false); - assertTrue(execPayload.length == 0); - } - - FLA.startAuction(); - - } - function testGelatoAutoship() public { - - // Pump SEARCHER_ADDRESS1 balances since he'll be bidding on all validators - vm.deal(SEARCHER_ADDRESS1,1000000*10**18); - vm.prank(SEARCHER_ADDRESS1); - wMatic.deposit{value: 1000000*10**18}(); - - vm.startPrank(OWNER); - uint24 fee = 0; // 0% so calculations are easier - FLA.setFastlaneFee(fee); - uint128 minAutoship = 2000 * (10**18); - FLA.setMinimumAutoShipThreshold(minAutoship); - // Force 2 payments per checker() call max - FLA.setAutopayBatchSize(2); - // First validator setup with enableValidatorAddressWithPreferences - address validatorPayable1 = vm.addr(1); - uint128 amount1 = minAutoship; - FLA.enableValidatorAddressWithPreferences(VALIDATOR1, amount1, validatorPayable1); - - // 2nd validator setup with enableValidatorAddressWithPreferences as himself - uint128 amount2 = minAutoship*2; - FLA.enableValidatorAddressWithPreferences(VALIDATOR2, amount2, VALIDATOR2); - - // 3rd set up without autoship originally then adds it himself - FLA.enableValidatorAddress(VALIDATOR3); - uint128 amount3 = minAutoship*3; - address validatorPayable3 = vm.addr(3); - vm.stopPrank(); - vm.prank(VALIDATOR3); - FLA.setValidatorPreferences(amount3, validatorPayable3); - - // 4th didn't ask for anything, he'll get default autoship - vm.startPrank(OWNER); - FLA.enableValidatorAddress(VALIDATOR4); - - // Now the opp - FLA.enableOpportunityAddress(OPPORTUNITY1); - - _splitTestGelatoPreStartChecker(); // auction_index == 2 - - vm.stopPrank(); - // Validator 1 will get his threshold met directly - Bid memory bid1 = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, amount1); - _approveAndSubmitBid(SEARCHER_ADDRESS1,bid1); - - // Validator 2 will get his threshold met in 2 steps - Bid memory bid2 = Bid(VALIDATOR2, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, amount2/2); - _approveAndSubmitBid(SEARCHER_ADDRESS1,bid2); - - // Validator 3 will get his threshold met directly - Bid memory bid3 = Bid(VALIDATOR3, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, amount3); - _approveAndSubmitBid(SEARCHER_ADDRESS1,bid3); - - // Validator 4 will get his threshold met directly - Bid memory bid4 = Bid(VALIDATOR4, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, minAutoship); - _approveAndSubmitBid(SEARCHER_ADDRESS1,bid4); - - // Check validatorsactiveAtAuctionRound - { - address[] memory prevRoundAddrs = FLA.getValidatorsactiveAtAuctionRound(2); - - // Should have 4 validators active - assertEq(prevRoundAddrs.length,4); - } - - - // Verify checker still doesn't run - { - (bool canExecR1, bytes memory execPayloadR1) = FLA.checker(); - - assertTrue(canExecR1 == false); - assertTrue(execPayloadR1.length == 0); - } - // Turn off checker - - vm.startPrank(OWNER); - FLA.setOffchainCheckerDisabledState(true); - FLA.endAuction(); // auction_index == 3 - FLA.startAuction(); - - // Verify checker still doesn't run even if it could from balances - { - (bool canExecR2, bytes memory execPayloadR2) = FLA.checker(); - - assertTrue(canExecR2 == false); - assertTrue(execPayloadR2.length == 0); - } - - // New bid on new auction_number so balances of VALIDATOR1 are moved to outstanding. - // Should not impact anything - vm.stopPrank(); - _approveAndSubmitBid(SEARCHER_ADDRESS1,bid1); - vm.startPrank(OWNER); - // Turn it back on and witness payments of 2 - FLA.setOffchainCheckerDisabledState(false); - - { - ValidatorBalanceCheckpoint memory vCheckOngoing = FLA.getCheckpoint(VALIDATOR1); - assertTrue(vCheckOngoing.outstandingBalance >= amount1); - } - - { - (bool hasJobs,) = FLA.getAutopayJobs(2, 2); - assertEq(hasJobs, true); - } - - (bool canExec, bytes memory execPayload) = FLA.checker(); - - assertTrue(canExec == true); - assertTrue(execPayload.length > 0); - - - vm.stopPrank(); - vm.startPrank(OPS_ADDRESS); - { - // Validator 1 and 3 should have been autoshipped - vm.expectEmit(true, true, true, true, address(FLA)); - emit ValidatorWithdrawnBalance(VALIDATOR1, 3, 2000 * (10**18), vm.addr(1), OPS_ADDRESS); - - vm.expectEmit(true, true, true, true, address(FLA)); - emit ValidatorWithdrawnBalance(VALIDATOR3, 3, 6000 * (10**18), vm.addr(3), OPS_ADDRESS); - - - (bool success,) = address(FLA).call(execPayload); - assertTrue(success); - } - - // Call it again and witness payment of 1 - { - (bool hasJobs4,) = FLA.getAutopayJobs(2, 2); - assertEq(hasJobs4, true); - - (bool canExec4, bytes memory execPayload4) = FLA.checker(); - - assertTrue(canExec4 == true); - assertTrue(execPayload4.length > 0); - // Validator 4 will get autoship - vm.expectEmit(true, true, true, true, address(FLA)); - emit ValidatorWithdrawnBalance(VALIDATOR4, 3, 2000 * (10**18), VALIDATOR4, OPS_ADDRESS); - - (bool success,) = address(FLA).call(execPayload4); - assertTrue(success); - - // No more folks to handle - (bool canExec5,) = FLA.checker(); - assertTrue(canExec5 == false); - } - - - } - - function testRedeemableOutstanding() public { - - // Pump SEARCHER_ADDRESS1 balances since he'll be bidding on all validators - vm.deal(SEARCHER_ADDRESS1,1000000*10**18); - vm.prank(SEARCHER_ADDRESS1); - wMatic.deposit{value: 1000000*10**18}(); - - vm.startPrank(OWNER); - uint24 fee = 0; // 0% so calculations are easier - FLA.setFastlaneFee(fee); - uint128 minAutoship = 2000 * (10**18); - FLA.setMinimumAutoShipThreshold(minAutoship); - // Force 2 payments per checker() call max - FLA.setAutopayBatchSize(2); - // First validator setup with enableValidatorAddressWithPreferences - address validatorPayable1 = vm.addr(1); - uint128 amount1 = minAutoship; - FLA.enableValidatorAddressWithPreferences(VALIDATOR1, amount1, validatorPayable1); - - // 2nd validator setup with enableValidatorAddressWithPreferences as himself - uint128 amount2 = minAutoship*2; // Autoship at 4k - FLA.enableValidatorAddressWithPreferences(VALIDATOR2, amount2, VALIDATOR2); - - // Now the opp - FLA.enableOpportunityAddress(OPPORTUNITY1); - - _splitTestGelatoPreStartChecker(); // auction_index == 2 - - vm.stopPrank(); - // Validator 1 will get his threshold met directly - Bid memory bid1 = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, amount1); - _approveAndSubmitBid(SEARCHER_ADDRESS1,bid1); - - // Validator 2 will get his threshold met in 2 steps - Bid memory bid2 = Bid(VALIDATOR2, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, amount2/2); - _approveAndSubmitBid(SEARCHER_ADDRESS1,bid2); - - // Check validatorsactiveAtAuctionRound - { - address[] memory prevRoundAddrs = FLA.getValidatorsactiveAtAuctionRound(2); - - // Should have 2 validators active - assertEq(prevRoundAddrs.length,2); - } - - - // Verify checker still doesn't run - { - (bool canExec1, bytes memory execPayload1) = FLA.checker(); - - assertTrue(canExec1 == false); - assertTrue(execPayload1.length == 0); - } - - (bool hasJobs, address[] memory autopayRecipients) = FLA.getAutopayJobs(2, 2); - assertEq(hasJobs, false); - assertEq(autopayRecipients[0],address(0)); - assertEq(autopayRecipients[1],address(0)); - - vm.startPrank(OWNER); - FLA.endAuction(); // auction_index == 3 - FLA.startAuction(); - - { - ValidatorBalanceCheckpoint memory vCheckOngoing = FLA.getCheckpoint(VALIDATOR1); - assertEq(vCheckOngoing.pendingBalanceAtlastBid, amount1); - } - - { - ValidatorPreferences memory valPrefs = FLA.getPreferences(VALIDATOR2); - assertEq(valPrefs.minAutoshipAmount, 4000 * (10**18)); - - ValidatorBalanceCheckpoint memory vCheckOngoing = FLA.getCheckpoint(VALIDATOR2); - assertEq(vCheckOngoing.pendingBalanceAtlastBid, amount2/2); - assertEq(vCheckOngoing.outstandingBalance, 0); - // Forge coverage being drunk ? Says checkRedeemableOutstanding never branches out - // Making _checkRedeemableOutstanding -> checkRedeemableOutstanding (public) and testing - // both variations still trips out coverage - // bool isRedeemable = FLA.checkRedeemableOutstanding(vCheckOngoing, valPrefs.minAutoshipAmount); - // assertEq(isRedeemable, false); - } - - - - - (hasJobs, autopayRecipients) = FLA.getAutopayJobs(2, 2); - assertEq(hasJobs, true); - assertEq(autopayRecipients[0],VALIDATOR1); - assertEq(autopayRecipients[1],address(0)); - - - (bool canExec, bytes memory execPayload) = FLA.checker(); - - assertTrue(canExec == true); - assertTrue(execPayload.length > 0); - - - vm.stopPrank(); - vm.startPrank(OPS_ADDRESS); - { - // Validator 1 should have been autoshipped - vm.expectEmit(true, true, true, true, address(FLA)); - emit ValidatorWithdrawnBalance(VALIDATOR1, 3, 2000 * (10**18), vm.addr(1), OPS_ADDRESS); - - (bool success,) = address(FLA).call(execPayload); - assertTrue(success); - } - - (hasJobs,autopayRecipients) = FLA.getAutopayJobs(2, 2); - assertEq(hasJobs, false); - assertEq(autopayRecipients[0],address(0)); - assertEq(autopayRecipients[1],address(0)); - - vm.stopPrank(); - vm.startPrank(OWNER); - FLA.endAuction(); - FLA.startAuction(); - vm.stopPrank(); - - _approveAndSubmitBid(SEARCHER_ADDRESS1,bid2); - - (hasJobs,autopayRecipients) = FLA.getAutopayJobs(2, 2); - assertEq(hasJobs, false); - assertEq(autopayRecipients[0],address(0)); - assertEq(autopayRecipients[1],address(0)); - - vm.startPrank(OWNER); - FLA.endAuction(); - FLA.startAuction(); - - (hasJobs,autopayRecipients) = FLA.getAutopayJobs(2, 2); - assertEq(hasJobs, true); - assertEq(autopayRecipients[0],VALIDATOR2); - assertEq(autopayRecipients[1],address(0)); - - { - ValidatorBalanceCheckpoint memory vCheckOngoing = FLA.getCheckpoint(VALIDATOR2); - assertEq(vCheckOngoing.pendingBalanceAtlastBid, amount2/2); - assertEq(vCheckOngoing.outstandingBalance, amount2/2); - // bool isRedeemable = FLA.checkRedeemableOutstanding(vCheckOngoing, 4000*10**18); - // assertEq(isRedeemable, true); - } - - (canExec, execPayload) = FLA.checker(); - - assertTrue(canExec == true); - assertTrue(execPayload.length > 0); - - - vm.stopPrank(); - vm.startPrank(OPS_ADDRESS); - { - // Validator 2 should have been autoshipped - vm.expectEmit(true, true, true, true, address(FLA)); - emit ValidatorWithdrawnBalance(VALIDATOR2, 5, 4000 * (10**18), VALIDATOR2, OPS_ADDRESS); - - (bool success,) = address(FLA).call(execPayload); - assertTrue(success); - } - - } - - function testReinitSetup() public { - vm.expectRevert(FastLaneEvents.TimeAlreadyInit.selector); - vm.prank(OWNER); - FLA.initialSetupAuction(vm.addr(1),OPS_ADDRESS, VALIDATOR2); - } - - function testAutoshipThreshold() public { - vm.startPrank(OWNER); - uint128 minAutoship = 10000*10**18; - vm.expectEmit(true, false, false, false, address(FLA)); - emit MinimumAutoshipThresholdSet(minAutoship); - FLA.setMinimumAutoShipThreshold(minAutoship); - } - - function testGasChecker() public { - - // Pump SEARCHER_ADDRESS1 balances since he'll be bidding on all validators - vm.deal(SEARCHER_ADDRESS1,1000000*10**18); - vm.prank(SEARCHER_ADDRESS1); - wMatic.deposit{value: 1000000*10**18}(); - - vm.startPrank(OWNER); - uint24 fee = 0; // 0% so calculations are easier - FLA.setFastlaneFee(fee); - uint128 minAutoship = 2000 * (10**18); - FLA.setMinimumAutoShipThreshold(minAutoship); - // Force 2 payments per checker() call max - FLA.setAutopayBatchSize(2); - // First validator setup with enableValidatorAddressWithPreferences - address validatorPayable1 = vm.addr(1); - uint128 amount1 = minAutoship; - FLA.enableValidatorAddressWithPreferences(VALIDATOR1, amount1, validatorPayable1); - - // Now the opp - FLA.enableOpportunityAddress(OPPORTUNITY1); - - _splitTestGelatoPreStartChecker(); // auction_index == 2 - - vm.stopPrank(); - // Validator 1 will get his threshold met directly - Bid memory bid1 = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, amount1); - _approveAndSubmitBid(SEARCHER_ADDRESS1,bid1); - - // Check validatorsactiveAtAuctionRound - { - address[] memory prevRoundAddrs = FLA.getValidatorsactiveAtAuctionRound(2); - - // Should have 1 validator active - assertEq(prevRoundAddrs.length,1); - } - - - // Verify checker still doesn't run - { - (bool canExecR1, bytes memory execPayloadR1) = FLA.checker(); - - assertTrue(canExecR1 == false); - assertTrue(execPayloadR1.length == 0); - } - // Turn off checker with gas - - vm.startPrank(OWNER); - vm.expectEmit(true, false, false, false, address(FLA)); - emit ResolverMaxGasPriceSet(0); - FLA.setResolverMaxGasPrice(0); - - FLA.endAuction(); // auction_index == 3 - FLA.startAuction(); - - vm.expectEmit(true, false, false, false, address(FLA)); - emit OpsSet(vm.addr(1337)); - FLA.setOps(vm.addr(1337)); - vm.stopPrank(); - - vm.startPrank(vm.addr(1337)); - // Verify checker still doesn't run even if it could from balances - (bool canExec, bytes memory execPayload) = FLA.checker(); - - assertTrue(canExec == false); - assertTrue(execPayload.length == 0); - - address[] memory recipients = new address[](2); - recipients[1] = vm.addr(1); - vm.expectRevert(FastLaneEvents.TimeGasNotSuitable.selector); - - FLA.processAutopayJobs(recipients); - - vm.stopPrank(); - vm.prank(OWNER); - FLA.setResolverMaxGasPrice(10*10**18); - - vm.startPrank(vm.addr(1337)); - (canExec, execPayload) = FLA.checker(); - assertTrue(canExec == true); - } - - function testEmergencyWithdraw() public { - vm.deal(address(FLA),10*10**18); - - vm.startPrank(OWNER); - vm.expectEmit(true, true, false, false, address(FLA)); - emit WithdrawStuckNativeToken(OWNER, 10*10**18); - FLA.withdrawStuckNativeToken(10*10**18); - assertEq(OWNER.balance, 10*10**18); - - MockERC20 token = new MockERC20("Token", "TKN", 18); - token.mint(address(FLA), 1e18); - - vm.expectEmit(true, true, true, false, address(FLA)); - emit WithdrawStuckERC20(address(FLA), OWNER, 1e18); - FLA.withdrawStuckERC20(address(token)); - assertEq(token.balanceOf(OWNER), 1e18); - assertEq(token.balanceOf(address(FLA)), 0); - - vm.expectRevert(FastLaneEvents.InequalityWrongToken.selector); - FLA.withdrawStuckERC20(address(wMatic)); - } - - function testBidToken() public { - vm.startPrank(OWNER); - address badToken = address(0); - vm.expectRevert(FastLaneEvents.GeneralFailure.selector); - FLA.setBidToken(badToken); - } - - function testFeeUpdate() public { - vm.startPrank(OWNER); - uint24 abusiveFee = 1300000; - vm.expectRevert(FastLaneEvents.InequalityTooHigh.selector); - FLA.setFastlaneFee(abusiveFee); - - uint24 fee = 50000*2; // 10% - FLA.setFastlaneFee(fee); - - FLA.enableValidatorAddress(VALIDATOR1); - FLA.enableOpportunityAddress(OPPORTUNITY1); - FLA.startAuction(); - vm.stopPrank(); - Bid memory auctionRightMinimumBidWithSearcher = Bid(VALIDATOR1, OPPORTUNITY1, BIDDER1, SEARCHER_ADDRESS1, FLA.bid_increment()); - _approveAndSubmitBid(SEARCHER_ADDRESS1,auctionRightMinimumBidWithSearcher); - - vm.startPrank(OWNER); - FLA.endAuction(); - - // Check checkpoint and cuts - ValidatorBalanceCheckpoint memory vCheck = FLA.getCheckpoint(VALIDATOR1); - (uint256 vCut, uint256 pflCut) = _calculateCuts(auctionRightMinimumBidWithSearcher.bidAmount,FLA.fast_lane_fee()); - - assertTrue(vCheck.pendingBalanceAtlastBid == vCut); - assertTrue(vCheck.outstandingBalance == 0); - assertTrue(vCheck.lastWithdrawnAuction == 0); - assertTrue(vCheck.lastBidReceivedAuction == 1); - - FLA.redeemOutstandingBalance(VALIDATOR1); - - vCheck = FLA.getCheckpoint(VALIDATOR1); - assertTrue(vCheck.pendingBalanceAtlastBid == 0); - assertTrue(vCheck.outstandingBalance == 0); - assertTrue(vCheck.lastWithdrawnAuction == 2); - assertTrue(vCheck.lastBidReceivedAuction == 1); - - assertTrue(wMatic.balanceOf(VALIDATOR1) == vCut); - assertTrue(wMatic.balanceOf(VALIDATOR1) == 9000000000000000000); - assertTrue(wMatic.balanceOf(OWNER) == 1000000000000000000); - assertTrue(wMatic.balanceOf(OWNER) == pflCut); - - } -} diff --git a/test/legacy-test/PFLDeploy.t.sol b/test/legacy-test/PFLDeploy.t.sol deleted file mode 100644 index d6e0276..0000000 --- a/test/legacy-test/PFLDeploy.t.sol +++ /dev/null @@ -1,145 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity 0.8.16; - -import "contracts/legacy/FastLaneLegacyAuction.sol"; - -import "forge-std/Test.sol"; -import "forge-std/console.sol"; -import "forge-std/console2.sol"; - -import "contracts/legacy/FastLaneLegacyAuction.sol"; - -import {ERC1967Proxy} from "openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol"; - -import {PFLHelper} from "./PFLAuction.t.sol"; - -contract PFLDeployTest is Test, PFLHelper { - FastLaneLegacyAuction public fastlaneImplementation; - address constant foundryFactory = 0x4e59b44847b379578588920cA78FbF26c0B4956C; - address constant expectedImplementationAddress = 0x111bE7a544ba60D162f5d75Ea6bdA7254D650D8b; - address expectedProxyAddress = 0xfa571A11e01d7759B816B41B5018432B2D202043; - address constant eoa = 0x1BA0f96bf6b26df11a58553c6db9a0314938Cf70; - event Upgraded(address indexed implementation); - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - event Initialized(uint8 version); - - bytes32 implementationSaltStr = 0x2141af04bf09baab736a447148a230ae150f8f6fc929d6c6f2ccc364f364fb5a; - bytes32 proxySaltStr = 0xb225d27dc65c353234f5c8ec7c01d2a08967b60d774b801949184d7dfe8a1b9f; - - function setUp() public { - - // Deploy impl as foundry factory with salt - vm.prank(foundryFactory); - fastlaneImplementation = new FastLaneLegacyAuction{salt: implementationSaltStr}(eoa); - - console2.log("Implementation Deployed at:"); - console2.log(address(fastlaneImplementation)); - console2.log(address(fastlaneImplementation).code.length); - console2.log("------------------------------------"); - } - - function _ignoretestDeploy() public { - - - // Call that will be made after deploy of Proxy - // will transfer ownership to `eoa` after receiving it from `foundryFactory` - bytes memory encodedPostProxyDeployCall = abi.encodeWithSignature("initialize(address)", eoa); - - vm.prank(foundryFactory); - vm.expectEmit(true, true, true, true); - emit Upgraded(expectedImplementationAddress); - vm.expectEmit(true, true, true, true); - emit OwnershipTransferred(0x0000000000000000000000000000000000000000, foundryFactory); - vm.expectEmit(true, true, true, true); - emit OwnershipTransferred(foundryFactory, eoa); - vm.expectEmit(true, true, true, true); - emit Initialized(1); - // emit Initialized - ERC1967Proxy proxy = new ERC1967Proxy{salt: proxySaltStr}(address(fastlaneImplementation), encodedPostProxyDeployCall); - - console2.log("Deployed Proxy @:"); - address deployedProxyAddress = address(proxy); - console2.log(deployedProxyAddress); - console2.log("------------------------------------"); - - - assertEq(deployedProxyAddress,expectedProxyAddress, "Addresses mismatch"); - - vm.startPrank(eoa); - address STARTER_ROLE = msg.sender; - vm.expectEmit(true, true, true, false, expectedProxyAddress); - emit BidTokenSet(STARTER_ROLE); - vm.expectEmit(true, true, true, false, expectedProxyAddress); - emit OpsSet(STARTER_ROLE); - vm.expectEmit(true, true, true, false, expectedProxyAddress); - emit MinimumBidIncrementSet(10000000000000000000); - vm.expectEmit(true, true, true, false, expectedProxyAddress); - emit MinimumAutoshipThresholdSet(2000000000000000000000); - vm.expectEmit(true, true, true, false, expectedProxyAddress); - emit ResolverMaxGasPriceSet(200000000000); - vm.expectEmit(true, true, true, false, expectedProxyAddress); - emit FastLaneFeeSet(5000); - vm.expectEmit(true, true, true, false, expectedProxyAddress); - emit AutopayBatchSizeSet(10); - vm.expectEmit(true, true, true, false, expectedProxyAddress); - emit AuctionStarterSet(STARTER_ROLE); - (bool successInitialSetupAuction, bytes memory returnSetupData) = deployedProxyAddress.call(abi.encodeWithSignature("initialSetupAuction(address,address,address)", STARTER_ROLE, STARTER_ROLE, STARTER_ROLE)); - - console2.log("initialSetupAuction call:"); - console2.log(successInitialSetupAuction); - console2.log(string(returnSetupData)); - - assertTrue(successInitialSetupAuction); - } - - // function testUpgrade() public { - - // bytes memory encodedPostProxyDeployCall = abi.encodeWithSignature("initialize(address)", eoa); - - // vm.prank(foundryFactory); - // ERC1967Proxy proxy = new ERC1967Proxy{salt: proxySaltStr}(address(fastlaneImplementation), encodedPostProxyDeployCall); - - // console2.log("Deployed Proxy @:"); - // address deployedProxyAddress = address(proxy); - // console2.log(deployedProxyAddress); - // console2.log("------------------------------------"); - - // assertEq(deployedProxyAddress,expectedProxyAddress, "Addresses mismatch"); - - // vm.prank(eoa); - // address STARTER_ROLE = msg.sender; - // (bool successInitialSetupAuction, bytes memory returnSetupData) = deployedProxyAddress.call(abi.encodeWithSignature("initialSetupAuction(address,address,address)", STARTER_ROLE, STARTER_ROLE, STARTER_ROLE)); - - // console2.log("initialSetupAuction call:"); - // console2.log(successInitialSetupAuction); - // console2.log(string(returnSetupData)); - - // assertTrue(successInitialSetupAuction); - - // // V2 Impl - // bytes32 implementationV2SaltStrV2 = "V2"; - // // Deploy impl as foundry factory with salt - // vm.prank(foundryFactory); - // FastLaneLegacyAuction fastlaneV2ImplementationV2 = new FastLaneLegacyAuction{salt: implementationV2SaltStrV2}(eoa); // 0x368845aff2b7051c33ca5db927eceb6e54efce5c - - // vm.prank(eoa); - // vm.expectEmit(true, true, true, true); - // emit Upgraded(address(fastlaneV2ImplementationV2)); - // (bool successUpgrade, bytes memory returnUpgradeData) = deployedProxyAddress.call(abi.encodeWithSignature("upgradeTo(address)", address(fastlaneV2ImplementationV2))); - - // assertTrue(successUpgrade); - - // vm.startPrank(eoa); - // vm.expectEmit(true, true, true, true, address(deployedProxyAddress)); - // emit OpsSet(eoa); - // (bool successCallAsOwner,) = deployedProxyAddress.call(abi.encodeWithSignature("setOps(address)", address(eoa))); - - // assertTrue(successCallAsOwner); - - // vm.expectEmit(true, true, true, true, address(deployedProxyAddress)); - // emit OwnershipTransferred(eoa, VALIDATOR1); - // (bool successCallTransfer,) = deployedProxyAddress.call(abi.encodeWithSignature("transferOwnership(address)", address(VALIDATOR1))); - - // assertTrue(successCallTransfer); - // } -} \ No newline at end of file diff --git a/yarn-error.log b/yarn-error.log deleted file mode 100644 index 5ebd626..0000000 --- a/yarn-error.log +++ /dev/null @@ -1,7086 +0,0 @@ -Arguments: - /Users/lx0/.nvm/versions/node/v14.17.1/bin/node /Users/lx0/.nvm/versions/node/v14.17.1/bin/yarn ftest - -PATH: - /Users/lx0/Library/Python/3.8/bin:/Users/lx0/.cargo/bin:/Users/lx0/.nvm/versions/node/v14.17.1/bin:/Users/lx0/.nix-profile/bin:/nix/var/nix/profiles/default/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/MacGPG2/bin:/Library/Apple/usr/bin:/Users/lx0/Library/Python/3.8/bin:/Users/lx0/.cargo/bin:/Users/lx0/.nvm/versions/node/v14.17.1/bin:/Users/lx0/.nix-profile/bin:/nix/var/nix/profiles/default/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/Applications/Visual Studio Code.app/Contents/Resources/app/bin:/Users/lx0/.yarn/bin:/Users/lx0/.foundry/bin:/Applications/Visual Studio Code.app/Contents/Resources/app/bin:/Applications/Visual Studio Code.app/Contents/Resources/app/bin:/Users/lx0/.yarn/bin:/Users/lx0/.foundry/bin - -Yarn version: - 1.22.17 - -Node version: - 14.17.1 - -Platform: - darwin x64 - -Trace: - SyntaxError: /Users/lx0/Sites/solidity/pflsc/package.json: Unexpected string in JSON at position 3043 - at JSON.parse () - at /Users/lx0/.nvm/versions/node/v14.17.1/lib/node_modules/yarn/lib/cli.js:1625:59 - at Generator.next () - at step (/Users/lx0/.nvm/versions/node/v14.17.1/lib/node_modules/yarn/lib/cli.js:310:30) - at /Users/lx0/.nvm/versions/node/v14.17.1/lib/node_modules/yarn/lib/cli.js:321:13 - -npm manifest: - { - "name": "pflsc", - "version": "1.0.0", - "main": "index.js", - "scripts": { - "expenv": "export $(grep -v '^#' .env | xargs)", - "source": "source .env", - "allexport": "set -o allexport; source .env; set +o allexport", - "reinstall": "rm -rf node_modules && rm -f yarn.lock && yarn clean && yarn", - "clean": "rm -rf build cache coverage coverage.json test-results.xml && forge clean", - "clean-deployed": "rm -rf abis && rm -f .openzeppelin/unknown-31337.json && rm -f .openzeppelin/mumbai.json", - "coverage": "forge coverage --report lcov && genhtml lcov.info -o report --branch-coverage && open report/index.html", - "clean-test": "rm -rf abis .openzeppelin/${npm_config_network:-'unknown-31337'}.json deployments/${npm_config_network:-hardhat}/*.json test-results.xml", - "verify": "yarn hint && yarn test", - "compile": "hardhat --show-stack-traces --max-memory 8192 compile", - "test": "yarn clean-test && hardhat test --show-stack-traces && yarn clean-test", - "test-only": "yarn clean-test && hardhat test --show-stack-traces", - "watch-test": "hardhat watch test", - "hint": "solhint \"contracts/**/*.sol\"", - "hh-coverage": "yarn clean-test && hardhat --show-stack-traces coverage --temp coverage_build && yarn clean-test", - "hardhat_gas": "REPORT_GAS=true hardhat test", - "gas": "forge test -vv --gas-report", - "ftest": "source .env && forge test -vvv --gas-report", - "ftest-ci": "forge test -vvvv", - "ftest-fork": "source .env && forge test -vvv --fork-url ${ALCHEMY_APIKEY_MUMBAI} --fork-block-number 26702726 --gas-report", - "ftrpc": "forge test -vv --ffi", - "start": "hardhat node --port 8545", - "anvil": "anvil", - "anvil-mumbai": "anvil -f $ALCHEMY_APIKEY_MUMBAI", - "anvil-polygon": "anvil -f $ALCHEMY_APIKEY_POLYGON", - "anvil-polygon-old": "source .env && anvil -f $ALCHEMY_APIKEY_POLYGON --fork-block-number 32499027", - "mythril-local": "myth analyze contracts/legacy/FastLaneLegacyAuction.sol", - "mythril-docker": "docker run -it --rm -v$(pwd):/home/mythril mythril/myth -v4 analyze contracts/legacy/FastLaneLegacyAuction.sol --solc-json mythril.config.json --solv 0.8.15", - "mappings": "forge remappings > remappings.txt", - "deploy": "yarn clean-test && hardhat deploy", - "deploy-only": "hardhat deploy --tags", - "gen-docs": "solidity-docgen -i contracts -o docs", - "gen-inheritance": "slither contracts/legacy/FastLaneLegacyAuction.sol --print inheritance-graph", - "gen-interface": "cast interface -n IFastLaneAuction -o contracts/interfaces/IFastLaneAuction.sol ./out/FastLaneAuction.sol/FastLaneAuction.json", - "gen-abi": "jq '.abi' out/FastLaneAuction.sol/FastLaneAuction.json > contracts/abis/FastLaneAuctionAbi.json", - "slither": "slither . --compile-force-framework foundry --filter-paths 'test|lib'", - "snapshot": "source .env && forge snapshot -vvv --gas-report", - "gen-prepush": "yarn gen-inheritance && yarn gen-interface && yarn gen-abi", - "sizes": "forge build --sizes", - "relayTest": "forge test -vvv --match-contract PFLRelayTest" - "solc": "solc-select install 0.8.16 && solc-select use 0.8.16", - "layout": "slither-read-storage contracts/legacy/FastLaneLegacyAuction.sol 0xc71cf7eb2839d864f356da13ebe22883fcbc9b0f --layout --solc-remaps 'ds-test/=./lib/forge-std/lib/ds-test/src/ eth-gas-reporter/=./node_modules/eth-gas-reporter/ forge-std/=./lib/forge-std/src/ hardhat/=./node_modules/hardhat/ openzeppelin-contracts/=./lib/openzeppelin-contracts/ openzeppelin-contracts-upgradeable/=./lib/openzeppelin-contracts-upgradeable/ solmate/=./lib/solmate/src/' --rpc-url http://localhost:8545 2> .storage-layout", - "deploy-anvil-factory": "source .env && forge script script/PreProxyDeploy.s.sol:Deploy --fork-url http://localhost:8545 --private-key $TESTNET_KEY --broadcast", - "deploy-anvil-eoa": "source .env && forge script script/EOADeploy.s.sol:Deploy --fork-url http://localhost:8545 --private-key $TESTNET_KEY --broadcast", - "deploy-anvil-proxy": "source .env && forge script script/UUPSDeploy.s.sol:Deploy --fork-url http://localhost:8545 --private-key $TESTNET_KEY --broadcast", - "deploy-live-beta-proxy": "source .env && forge script script/UUPSDeploy.s.sol:Deploy --rpc-url $ALCHEMY_APIKEY_POLYGON --private-key $TESTNET_KEY --broadcast --etherscan-api-key $POLYGONSCAN_APIKEY --verify --gas-price 50000000000 --with-gas-price 50000000000", - "deploy-live-trial-eoa": "source .env && forge script script/EOADeploy.s.sol:Deploy --rpc-url $ALCHEMY_APIKEY_POLYGON --private-key $TESTNET_KEY --broadcast --etherscan-api-key $POLYGONSCAN_APIKEY --verify --gas-price 50000000000 --with-gas-price 50000000000" - }, - "devDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.6", - "@nomiclabs/hardhat-etherscan": "^3.0.4", - "chai": "^4.3.6", - "chalk": "^5.0.1", - "debug": "^4.3.4", - "dotenv": "^16.0.1", - "eslint": "^8.17.0", - "eslint-plugin-jest": "^26.4.6", - "ethers": "^5.6.8", - "ganache-cli": "^6.12.2", - "hardhat": "^2.9.7", - "hardhat-abi-exporter": "^2.9.0", - "hardhat-gas-reporter": "^1.0.8", - "hardhat-preprocessor": "^0.1.4", - "husky": "^8.0.1", - "lodash": "^4.17.21", - "solc": "^0.8.16", - "solhint": "^3.3.7", - "solhint-plugin-prettier": "^0.0.5", - "solidity-coverage": "^0.7.21", - "solidity-docgen": "^0.6.0-beta.25", - "typechain": "^8.1.0", - "typescript": "^4.7.3" - }, - "dependencies": { - "dateformat": "^5.0.3", - "hardhat-watcher": "^2.3.0", - "moment": "^2.29.3", - "sleep-promise": "^9.1.0" - } - } - -yarn manifest: - No manifest - -Lockfile: - # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. - # yarn lockfile v1 - - - "@babel/code-frame@^7.0.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" - - "@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - - "@babel/highlight@^7.16.7": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351" - integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - - "@eslint/eslintrc@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" - integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.3.2" - globals "^13.15.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - - "@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.2": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.6.2.tgz#63d1e26d0b7a7a3684fce920de6ebabec1e5b674" - integrity sha512-mOqYWwMlAZpYUEOEqt7EfMFuVL2eyLqWWIzcf4odn6QgXY8jBI2NhVuJncrMCKeMZrsJAe7/auaRRB6YcdH+Qw== - dependencies: - "@ethereumjs/common" "^2.6.3" - "@ethereumjs/tx" "^3.5.1" - ethereumjs-util "^7.1.4" - merkle-patricia-tree "^4.2.4" - - "@ethereumjs/blockchain@^5.5.2", "@ethereumjs/blockchain@^5.5.3": - version "5.5.3" - resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz#aa49a6a04789da6b66b5bcbb0d0b98efc369f640" - integrity sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw== - dependencies: - "@ethereumjs/block" "^3.6.2" - "@ethereumjs/common" "^2.6.4" - "@ethereumjs/ethash" "^1.1.0" - debug "^4.3.3" - ethereumjs-util "^7.1.5" - level-mem "^5.0.1" - lru-cache "^5.1.1" - semaphore-async-await "^1.5.1" - - "@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.6.3", "@ethereumjs/common@^2.6.4": - version "2.6.4" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.4.tgz#1b3cdd3aa4ee3b0ca366756fc35e4a03022a01cc" - integrity sha512-RDJh/R/EAr+B7ZRg5LfJ0BIpf/1LydFgYdvZEuTraojCbVypO2sQ+QnpP5u2wJf9DASyooKqu8O4FJEWUV6NXw== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.4" - - "@ethereumjs/ethash@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.1.0.tgz#7c5918ffcaa9cb9c1dc7d12f77ef038c11fb83fb" - integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA== - dependencies: - "@ethereumjs/block" "^3.5.0" - "@types/levelup" "^4.3.0" - buffer-xor "^2.0.1" - ethereumjs-util "^7.1.1" - miller-rabin "^4.0.0" - - "@ethereumjs/tx@^3.2.1", "@ethereumjs/tx@^3.5.1", "@ethereumjs/tx@^3.5.2": - version "3.5.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" - integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== - dependencies: - "@ethereumjs/common" "^2.6.4" - ethereumjs-util "^7.1.5" - - "@ethereumjs/vm@^5.9.0": - version "5.9.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.9.2.tgz#e707976d507793096e449a87f0b204f614421cee" - integrity sha512-6zvH7iuMI7+74aGak6j9+GDYpV2T08vy2FL4iSK1PId7lNyjFELCAzDCSTQcVoyPoRMkZvRHy79W+djwvguMCA== - dependencies: - "@ethereumjs/block" "^3.6.2" - "@ethereumjs/blockchain" "^5.5.3" - "@ethereumjs/common" "^2.6.4" - "@ethereumjs/tx" "^3.5.2" - async-eventemitter "^0.2.4" - core-js-pure "^3.0.1" - debug "^4.3.3" - ethereumjs-util "^7.1.5" - functional-red-black-tree "^1.0.1" - mcl-wasm "^0.7.1" - merkle-patricia-tree "^4.2.4" - rustbn.js "~0.2.0" - - "@ethersproject/abi@5.0.7": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b" - integrity sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw== - dependencies: - "@ethersproject/address" "^5.0.4" - "@ethersproject/bignumber" "^5.0.7" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/constants" "^5.0.4" - "@ethersproject/hash" "^5.0.4" - "@ethersproject/keccak256" "^5.0.3" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/properties" "^5.0.3" - "@ethersproject/strings" "^5.0.4" - - "@ethersproject/abi@5.6.3", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.6.3": - version "5.6.3" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.3.tgz#2d643544abadf6e6b63150508af43475985c23db" - integrity sha512-CxKTdoZY4zDJLWXG6HzNH6znWK0M79WzzxHegDoecE3+K32pzfHOzuXg2/oGSTecZynFgpkjYXNPOqXVJlqClw== - dependencies: - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.1" - - "@ethersproject/abstract-provider@5.6.1", "@ethersproject/abstract-provider@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz#02ddce150785caf0c77fe036a0ebfcee61878c59" - integrity sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/networks" "^5.6.3" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/web" "^5.6.1" - - "@ethersproject/abstract-signer@5.6.2", "@ethersproject/abstract-signer@^5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz#491f07fc2cbd5da258f46ec539664713950b0b33" - integrity sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ== - dependencies: - "@ethersproject/abstract-provider" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - - "@ethersproject/address@5.6.1", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.1.tgz#ab57818d9aefee919c5721d28cd31fd95eff413d" - integrity sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/rlp" "^5.6.1" - - "@ethersproject/base64@5.6.1", "@ethersproject/base64@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.1.tgz#2c40d8a0310c9d1606c2c37ae3092634b41d87cb" - integrity sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw== - dependencies: - "@ethersproject/bytes" "^5.6.1" - - "@ethersproject/basex@5.6.1", "@ethersproject/basex@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.6.1.tgz#badbb2f1d4a6f52ce41c9064f01eab19cc4c5305" - integrity sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/properties" "^5.6.0" - - "@ethersproject/bignumber@5.6.2", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.6.2.tgz#72a0717d6163fab44c47bcc82e0c550ac0315d66" - integrity sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - bn.js "^5.2.1" - - "@ethersproject/bytes@5.6.1", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" - integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== - dependencies: - "@ethersproject/logger" "^5.6.0" - - "@ethersproject/constants@5.6.1", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.1.tgz#e2e974cac160dd101cf79fdf879d7d18e8cb1370" - integrity sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - - "@ethersproject/contracts@5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.2.tgz#20b52e69ebc1b74274ff8e3d4e508de971c287bc" - integrity sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g== - dependencies: - "@ethersproject/abi" "^5.6.3" - "@ethersproject/abstract-provider" "^5.6.1" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/transactions" "^5.6.2" - - "@ethersproject/hash@5.6.1", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.6.1.tgz#224572ea4de257f05b4abf8ae58b03a67e99b0f4" - integrity sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA== - dependencies: - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.1" - - "@ethersproject/hdnode@5.6.2", "@ethersproject/hdnode@^5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.6.2.tgz#26f3c83a3e8f1b7985c15d1db50dc2903418b2d2" - integrity sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q== - dependencies: - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/basex" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/pbkdf2" "^5.6.1" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/sha2" "^5.6.1" - "@ethersproject/signing-key" "^5.6.2" - "@ethersproject/strings" "^5.6.1" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/wordlists" "^5.6.1" - - "@ethersproject/json-wallets@5.6.1", "@ethersproject/json-wallets@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz#3f06ba555c9c0d7da46756a12ac53483fe18dd91" - integrity sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ== - dependencies: - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/hdnode" "^5.6.2" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/pbkdf2" "^5.6.1" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.1" - "@ethersproject/strings" "^5.6.1" - "@ethersproject/transactions" "^5.6.2" - aes-js "3.0.0" - scrypt-js "3.0.1" - - "@ethersproject/keccak256@5.6.1", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.6.1.tgz#b867167c9b50ba1b1a92bccdd4f2d6bd168a91cc" - integrity sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA== - dependencies: - "@ethersproject/bytes" "^5.6.1" - js-sha3 "0.8.0" - - "@ethersproject/logger@5.6.0", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" - integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== - - "@ethersproject/networks@5.6.3", "@ethersproject/networks@^5.6.3": - version "5.6.3" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.3.tgz#3ee3ab08f315b433b50c99702eb32e0cf31f899f" - integrity sha512-QZxRH7cA5Ut9TbXwZFiCyuPchdWi87ZtVNHWZd0R6YFgYtes2jQ3+bsslJ0WdyDe0i6QumqtoYqvY3rrQFRZOQ== - dependencies: - "@ethersproject/logger" "^5.6.0" - - "@ethersproject/pbkdf2@5.6.1", "@ethersproject/pbkdf2@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz#f462fe320b22c0d6b1d72a9920a3963b09eb82d1" - integrity sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/sha2" "^5.6.1" - - "@ethersproject/properties@5.6.0", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04" - integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg== - dependencies: - "@ethersproject/logger" "^5.6.0" - - "@ethersproject/providers@5.6.8": - version "5.6.8" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.8.tgz#22e6c57be215ba5545d3a46cf759d265bb4e879d" - integrity sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w== - dependencies: - "@ethersproject/abstract-provider" "^5.6.1" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/base64" "^5.6.1" - "@ethersproject/basex" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/networks" "^5.6.3" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.1" - "@ethersproject/rlp" "^5.6.1" - "@ethersproject/sha2" "^5.6.1" - "@ethersproject/strings" "^5.6.1" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/web" "^5.6.1" - bech32 "1.1.4" - ws "7.4.6" - - "@ethersproject/random@5.6.1", "@ethersproject/random@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.6.1.tgz#66915943981bcd3e11bbd43733f5c3ba5a790255" - integrity sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - - "@ethersproject/rlp@5.6.1", "@ethersproject/rlp@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.6.1.tgz#df8311e6f9f24dcb03d59a2bac457a28a4fe2bd8" - integrity sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - - "@ethersproject/sha2@5.6.1", "@ethersproject/sha2@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.1.tgz#211f14d3f5da5301c8972a8827770b6fd3e51656" - integrity sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - hash.js "1.1.7" - - "@ethersproject/signing-key@5.6.2", "@ethersproject/signing-key@^5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.6.2.tgz#8a51b111e4d62e5a62aee1da1e088d12de0614a3" - integrity sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - - "@ethersproject/solidity@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.6.1.tgz#5845e71182c66d32e6ec5eefd041fca091a473e2" - integrity sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/sha2" "^5.6.1" - "@ethersproject/strings" "^5.6.1" - - "@ethersproject/strings@5.6.1", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.6.1.tgz#dbc1b7f901db822b5cafd4ebf01ca93c373f8952" - integrity sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - - "@ethersproject/transactions@5.6.2", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.2.tgz#793a774c01ced9fe7073985bb95a4b4e57a6370b" - integrity sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q== - dependencies: - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/rlp" "^5.6.1" - "@ethersproject/signing-key" "^5.6.2" - - "@ethersproject/units@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.6.1.tgz#ecc590d16d37c8f9ef4e89e2005bda7ddc6a4e6f" - integrity sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - - "@ethersproject/wallet@5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.6.2.tgz#cd61429d1e934681e413f4bc847a5f2f87e3a03c" - integrity sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg== - dependencies: - "@ethersproject/abstract-provider" "^5.6.1" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/hdnode" "^5.6.2" - "@ethersproject/json-wallets" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.1" - "@ethersproject/signing-key" "^5.6.2" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/wordlists" "^5.6.1" - - "@ethersproject/web@5.6.1", "@ethersproject/web@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.6.1.tgz#6e2bd3ebadd033e6fe57d072db2b69ad2c9bdf5d" - integrity sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA== - dependencies: - "@ethersproject/base64" "^5.6.1" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.1" - - "@ethersproject/wordlists@5.6.1", "@ethersproject/wordlists@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.6.1.tgz#1e78e2740a8a21e9e99947e47979d72e130aeda1" - integrity sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.1" - - "@humanwhocodes/config-array@^0.9.2": - version "0.9.5" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" - integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.4" - - "@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - - "@metamask/eth-sig-util@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" - integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== - dependencies: - ethereumjs-abi "^0.6.8" - ethereumjs-util "^6.2.1" - ethjs-util "^0.1.6" - tweetnacl "^1.0.3" - tweetnacl-util "^0.15.1" - - "@noble/hashes@1.0.0", "@noble/hashes@~1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.0.0.tgz#d5e38bfbdaba174805a4e649f13be9a9ed3351ae" - integrity sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg== - - "@noble/secp256k1@1.5.5", "@noble/secp256k1@~1.5.2": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.5.5.tgz#315ab5745509d1a8c8e90d0bdf59823ccf9bcfc3" - integrity sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ== - - "@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - - "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - - "@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - - "@nomiclabs/hardhat-ethers@^2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.6.tgz#1c695263d5b46a375dcda48c248c4fba9dfe2fc2" - integrity sha512-q2Cjp20IB48rEn2NPjR1qxsIQBvFVYW9rFRCFq+bC4RUrn1Ljz3g4wM8uSlgIBZYBi2JMXxmOzFqHraczxq4Ng== - - "@nomiclabs/hardhat-etherscan@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.0.4.tgz#b12e3e226a5b73c4a66d0e6943f948bd093b2711" - integrity sha512-AZPlnyCYp3YObmhtsFo6RWgY/81fQKRF5h42iV22H4jz9MwP+SWeoB99YVPLnxId2fmAYu3VgCNeE9QpApv06g== - dependencies: - "@ethersproject/abi" "^5.1.2" - "@ethersproject/address" "^5.0.2" - cbor "^5.0.2" - debug "^4.1.1" - fs-extra "^7.0.1" - semver "^6.3.0" - undici "^4.14.1" - - "@scure/base@~1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.0.0.tgz#109fb595021de285f05a7db6806f2f48296fcee7" - integrity sha512-gIVaYhUsy+9s58m/ETjSJVKHhKTBMmcRb9cEV5/5dwvfDlfORjKrFsDeDHWRrm6RjcPvCLZFwGJjAjLj1gg4HA== - - "@scure/bip32@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.0.1.tgz#1409bdf9f07f0aec99006bb0d5827693418d3aa5" - integrity sha512-AU88KKTpQ+YpTLoicZ/qhFhRRIo96/tlb+8YmDDHR9yiKVjSsFZiefJO4wjS2PMTkz5/oIcw84uAq/8pleQURA== - dependencies: - "@noble/hashes" "~1.0.0" - "@noble/secp256k1" "~1.5.2" - "@scure/base" "~1.0.0" - - "@scure/bip39@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.0.0.tgz#47504e58de9a56a4bbed95159d2d6829fa491bb0" - integrity sha512-HrtcikLbd58PWOkl02k9V6nXWQyoa7A0+Ek9VF7z17DDk9XZAFUcIdqfh0jJXLypmizc5/8P6OxoUeKliiWv4w== - dependencies: - "@noble/hashes" "~1.0.0" - "@scure/base" "~1.0.0" - - "@sentry/core@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" - integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - - "@sentry/hub@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" - integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== - dependencies: - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - - "@sentry/minimal@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" - integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/types" "5.30.0" - tslib "^1.9.3" - - "@sentry/node@^5.18.1": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" - integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== - dependencies: - "@sentry/core" "5.30.0" - "@sentry/hub" "5.30.0" - "@sentry/tracing" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" - - "@sentry/tracing@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" - integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - - "@sentry/types@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" - integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== - - "@sentry/utils@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" - integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== - dependencies: - "@sentry/types" "5.30.0" - tslib "^1.9.3" - - "@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - - "@solidity-parser/parser@^0.14.0", "@solidity-parser/parser@^0.14.1": - version "0.14.1" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.1.tgz#179afb29f4e295a77cc141151f26b3848abc3c46" - integrity sha512-eLjj2L6AuQjBB6s/ibwCAc0DwrR5Ge+ys+wgWo+bviU7fV2nTMQhU63CGaDKXg9iTmMxwhkyoggdIR7ZGRfMgw== - dependencies: - antlr4ts "^0.5.0-alpha.4" - - "@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - - "@truffle/error@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.1.0.tgz#5e9fed79e6cda624c926d314b280a576f8b22a36" - integrity sha512-RbUfp5VreNhsa2Q4YbBjz18rOQI909pG32bghl1hulO7IpvcqTS+C3Ge5cNbiWQ1WGzy1wIeKLW0tmQtHFB7qg== - - "@truffle/interface-adapter@^0.5.16": - version "0.5.16" - resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.5.16.tgz#ff53a215e0c6bf7e47ef53dd13298bcb836b15fa" - integrity sha512-4L8/TtFSe9eW4KWeXAvi3RrD0rImbLeYB4axPLOCAitUEDCTB/iJjZ1cMkC85LbO9mwz5/AjP0i37YO10rging== - dependencies: - bn.js "^5.1.3" - ethers "^4.0.32" - web3 "1.5.3" - - "@truffle/provider@^0.2.24": - version "0.2.54" - resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.2.54.tgz#e34180eb3292be68ffdb8adaf7ae1c6b6611d482" - integrity sha512-BW2bb6p7dAipUCHlRDMSswFqessXkIb8tHVRVkm6KAENIor0F4UCCPlxIzrM/ShRQ1O16jZ+0cxLMwiRWTWdLg== - dependencies: - "@truffle/error" "^0.1.0" - "@truffle/interface-adapter" "^0.5.16" - web3 "1.5.3" - - "@types/abstract-leveldown@*": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#f055979a99f7654e84d6b8e6267419e9c4cfff87" - integrity sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ== - - "@types/bn.js@^4.11.3", "@types/bn.js@^4.11.5": - version "4.11.6" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" - integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== - dependencies: - "@types/node" "*" - - "@types/bn.js@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" - integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== - dependencies: - "@types/node" "*" - - "@types/concat-stream@^1.6.0": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" - integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== - dependencies: - "@types/node" "*" - - "@types/form-data@0.0.33": - version "0.0.33" - resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" - integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== - dependencies: - "@types/node" "*" - - "@types/glob@^7.1.1": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - - "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - - "@types/level-errors@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/level-errors/-/level-errors-3.0.0.tgz#15c1f4915a5ef763b51651b15e90f6dc081b96a8" - integrity sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ== - - "@types/levelup@^4.3.0": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.3.tgz#4dc2b77db079b1cf855562ad52321aa4241b8ef4" - integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== - dependencies: - "@types/abstract-leveldown" "*" - "@types/level-errors" "*" - "@types/node" "*" - - "@types/lru-cache@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" - integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== - - "@types/minimatch@*": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - - "@types/node@*": - version "17.0.39" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.39.tgz#3652d82e2a16b4ea679d5ea3143b816c91b7e113" - integrity sha512-JDU3YLlnPK3WDao6/DlXLOgSNpG13ct+CwIO17V8q0/9fWJyeMJJ/VyZ1lv8kDprihvZMydzVwf0tQOqGiY2Nw== - - "@types/node@^10.0.3": - version "10.17.60" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" - integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== - - "@types/node@^12.12.6": - version "12.20.54" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.54.tgz#38a3dff8c2a939553f2cdb85dcddc68be46c3c68" - integrity sha512-CFMnEPkSXWALI73t1oIWyb8QOmVrp6RruAqIx349sd+1ImaFwzlKcz55mwrx/yLyOyz1gkq/UKuNOigt27PXqg== - - "@types/node@^8.0.0": - version "8.10.66" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" - integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== - - "@types/pbkdf2@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" - integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== - dependencies: - "@types/node" "*" - - "@types/prettier@^2.1.1": - version "2.7.0" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.0.tgz#ea03e9f0376a4446f44797ca19d9c46c36e352dc" - integrity sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A== - - "@types/qs@^6.2.31": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - - "@types/secp256k1@^4.0.1": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" - integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== - dependencies: - "@types/node" "*" - - "@typescript-eslint/scope-manager@5.27.0": - version "5.27.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.27.0.tgz#a272178f613050ed62f51f69aae1e19e870a8bbb" - integrity sha512-VnykheBQ/sHd1Vt0LJ1JLrMH1GzHO+SzX6VTXuStISIsvRiurue/eRkTqSrG0CexHQgKG8shyJfR4o5VYioB9g== - dependencies: - "@typescript-eslint/types" "5.27.0" - "@typescript-eslint/visitor-keys" "5.27.0" - - "@typescript-eslint/types@5.27.0": - version "5.27.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.27.0.tgz#c3f44b9dda6177a9554f94a74745ca495ba9c001" - integrity sha512-lY6C7oGm9a/GWhmUDOs3xAVRz4ty/XKlQ2fOLr8GAIryGn0+UBOoJDWyHer3UgrHkenorwvBnphhP+zPmzmw0A== - - "@typescript-eslint/typescript-estree@5.27.0": - version "5.27.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.27.0.tgz#7965f5b553c634c5354a47dcce0b40b94611e995" - integrity sha512-QywPMFvgZ+MHSLRofLI7BDL+UczFFHyj0vF5ibeChDAJgdTV8k4xgEwF0geFhVlPc1p8r70eYewzpo6ps+9LJQ== - dependencies: - "@typescript-eslint/types" "5.27.0" - "@typescript-eslint/visitor-keys" "5.27.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - - "@typescript-eslint/utils@^5.10.0": - version "5.27.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.27.0.tgz#d0021cbf686467a6a9499bd0589e19665f9f7e71" - integrity sha512-nZvCrkIJppym7cIbP3pOwIkAefXOmfGPnCM0LQfzNaKxJHI6VjI8NC662uoiPlaf5f6ymkTy9C3NQXev2mdXmA== - dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.27.0" - "@typescript-eslint/types" "5.27.0" - "@typescript-eslint/typescript-estree" "5.27.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - - "@typescript-eslint/visitor-keys@5.27.0": - version "5.27.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.27.0.tgz#97aa9a5d2f3df8215e6d3b77f9d214a24db269bd" - integrity sha512-46cYrteA2MrIAjv9ai44OQDUoCZyHeGIc4lsjCUX2WT6r4C+kidz1bNiR4017wHOPUythYeH+Sc7/cFP97KEAA== - dependencies: - "@typescript-eslint/types" "5.27.0" - eslint-visitor-keys "^3.3.0" - - "@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== - - abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - - abbrev@1.0.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== - - abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - - abstract-leveldown@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" - integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - - abstract-leveldown@~6.2.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" - integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - - accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - - acorn-jsx@^5.0.0, acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - - acorn@^6.0.7: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - - acorn@^8.7.1: - version "8.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== - - address@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/address/-/address-1.2.0.tgz#d352a62c92fee90f89a693eccd2a8b2139ab02d9" - integrity sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig== - - adm-zip@^0.4.16: - version "0.4.16" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" - integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== - - aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== - - agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - - aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - - ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.6.1, ajv@^6.9.1: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - - amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== - - ansi-colors@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== - - ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - - ansi-colors@^4.1.0, ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - - ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - - ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - - ansi-regex@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== - - ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - - ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - - ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - - ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - - antlr4@4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.7.1.tgz#69984014f096e9e775f53dd9744bf994d8959773" - integrity sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ== - - antlr4ts@^0.5.0-alpha.4: - version "0.5.0-alpha.4" - resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" - integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== - - anymatch@~3.1.1, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - - argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - - argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - - array-back@^3.0.1, array-back@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" - integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== - - array-back@^4.0.1, array-back@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" - integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== - - array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - - array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - - array-uniq@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== - - array.prototype.reduce@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz#8167e80089f78bff70a99e20bd4201d4663b0a6f" - integrity sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - - asap@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - - asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - - asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - - assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - - assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - - ast-parents@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" - integrity sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA== - - astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - - async-eventemitter@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" - integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== - dependencies: - async "^2.4.0" - - async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - - async@1.x: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== - - async@^2.4.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - - asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - - available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - - aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - - aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - - balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - - base-x@^3.0.2, base-x@^3.0.8: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - - base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - - bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - - bech32@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - - bignumber.js@^9.0.0, bignumber.js@^9.0.1: - version "9.0.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" - integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== - - binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - - blakejs@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" - integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== - - bluebird@^3.5.0: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - - bn.js@4.11.6: - version "4.11.6" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" - integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== - - bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - - bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.1.3, bn.js@^5.2.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - - body-parser@1.20.0, body-parser@^1.16.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.10.3" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - - brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - - braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - - brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - - browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - - browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - - browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - - browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - - browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - - browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - - bs58@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - - bs58check@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" - integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== - dependencies: - bs58 "^4.0.0" - create-hash "^1.1.0" - safe-buffer "^5.1.2" - - buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - - buffer-to-arraybuffer@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" - integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== - - buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - - buffer-xor@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-2.0.2.tgz#34f7c64f04c777a1f8aac5e661273bb9dd320289" - integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ== - dependencies: - safe-buffer "^5.1.1" - - buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - - bufferutil@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" - integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== - dependencies: - node-gyp-build "^4.3.0" - - bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - - cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - - call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - - caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== - dependencies: - callsites "^2.0.0" - - caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== - dependencies: - caller-callsite "^2.0.0" - - callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== - - callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - - camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - - camelcase@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - - caseless@^0.12.0, caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - - cbor@^5.0.2: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" - integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== - dependencies: - bignumber.js "^9.0.1" - nofilter "^1.0.4" - - chai@^4.3.6: - version "4.3.6" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" - integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^3.0.1" - get-func-name "^2.0.0" - loupe "^2.3.1" - pathval "^1.1.1" - type-detect "^4.0.5" - - chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - - chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - - chalk@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" - integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== - - chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - - "charenc@>= 0.0.1": - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== - - check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== - - chokidar@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" - integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.2.0" - optionalDependencies: - fsevents "~2.1.1" - - chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - - chownr@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - - ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - - cids@^0.7.1: - version "0.7.5" - resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" - integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== - dependencies: - buffer "^5.5.0" - class-is "^1.1.0" - multibase "~0.6.0" - multicodec "^1.0.0" - multihashes "~0.4.15" - - cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - - class-is@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" - integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== - - clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - - cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== - dependencies: - restore-cursor "^2.0.0" - - cli-table3@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" - optionalDependencies: - colors "^1.1.2" - - cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== - - cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - - cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - - clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q== - dependencies: - mimic-response "^1.0.0" - - color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - - color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - - color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - - color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - - colors@1.4.0, colors@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - - combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - - command-exists@^1.2.8: - version "1.2.9" - resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" - integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== - - command-line-args@^5.1.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" - integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== - dependencies: - array-back "^3.1.0" - find-replace "^3.0.0" - lodash.camelcase "^4.3.0" - typical "^4.0.0" - - command-line-usage@^6.1.0: - version "6.1.3" - resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" - integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== - dependencies: - array-back "^4.0.2" - chalk "^2.4.2" - table-layout "^1.0.2" - typical "^5.2.0" - - commander@2.18.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" - integrity sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ== - - commander@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" - integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== - - commander@^8.1.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - - concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - - concat-stream@^1.6.0, concat-stream@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - - content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - - content-hash@^2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" - integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== - dependencies: - cids "^0.7.1" - multicodec "^0.5.5" - multihashes "^0.4.15" - - content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - - cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - - cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - - cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - - cookiejar@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" - integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== - - core-js-pure@^3.0.1: - version "3.22.8" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.22.8.tgz#f2157793b58719196ccf9673cc14f3683adc0957" - integrity sha512-bOxbZIy9S5n4OVH63XaLVXZ49QKicjowDx/UELyJ68vxfCRpYsbyh/WNZNfEfAk+ekA8vSjt+gCDpvh672bc3w== - - core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - - core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - - cors@^2.8.1: - version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - - cosmiconfig@^5.0.7: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - - crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - - create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - - create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - - create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - - cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - - cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - - "crypt@>= 0.0.1": - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== - - crypto-browserify@3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - - d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - - dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - - dateformat@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-5.0.3.tgz#fe2223eff3cc70ce716931cb3038b59a9280696e" - integrity sha512-Kvr6HmPXUMerlLcLF+Pwq3K7apHpYmGDVqrxcDasBg86UcKeTSNWbEzU8bwdXnxnR44FtMhJAxI4Bov6Y/KUfA== - - death@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" - integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== - - debug@2.6.9, debug@^2.2.0, debug@^2.6.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - - debug@3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - - debug@4, debug@^4.0.1, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - - debug@4.3.3: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - - decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - - decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - - decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== - - decompress-response@^3.2.0, decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - - deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== - dependencies: - type-detect "^4.0.0" - - deep-extend@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - - deep-is@^0.1.3, deep-is@~0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - - defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - - deferred-leveldown@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" - integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== - dependencies: - abstract-leveldown "~6.2.1" - inherits "^2.0.3" - - define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - - delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - - delete-empty@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/delete-empty/-/delete-empty-3.0.0.tgz#f8040f2669f26fa7060bc2304e9859c593b685e8" - integrity sha512-ZUyiwo76W+DYnKsL3Kim6M/UOavPdBJgDYWOmuQhYaZvJH0AXAHbUNyEDtRbBra8wqqr686+63/0azfEk1ebUQ== - dependencies: - ansi-colors "^4.1.0" - minimist "^1.2.0" - path-starts-with "^2.0.0" - rimraf "^2.6.2" - - depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - - des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - - destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - - detect-port@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" - integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== - dependencies: - address "^1.0.1" - debug "^2.6.0" - - diff@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - - diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - - diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - - dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - - doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - - dom-walk@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" - integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== - - dotenv@^16.0.1: - version "16.0.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d" - integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== - - duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA== - - ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - - ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - - elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - - emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - - emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - - encode-utf8@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" - integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== - - encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - - encoding-down@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" - integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== - dependencies: - abstract-leveldown "^6.2.1" - inherits "^2.0.3" - level-codec "^9.0.0" - level-errors "^2.0.0" - - end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - - enquirer@^2.3.0: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - - env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - - errno@~0.1.1: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - - error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - - es-abstract@^1.19.0, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.0, es-abstract@^1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" - integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - regexp.prototype.flags "^1.4.3" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" - unbox-primitive "^1.0.2" - - es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - - es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - - es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.61" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.61.tgz#311de37949ef86b6b0dcea894d1ffedb909d3269" - integrity sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - - es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - - es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - - escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - - escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - - escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - - escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - - escodegen@1.8.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A== - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - - eslint-plugin-jest@^26.4.6: - version "26.4.6" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.4.6.tgz#9d8184c1ecf077722a20cc236c7e14f4e263606f" - integrity sha512-R3mq1IepnhtsukHQsWxdyKra3OVwYB+N4k8i45ndqSfr8p9KZV6G+EIUt1Z7hzAh4KlsbXG+nCTlNeGFLFLNvA== - dependencies: - "@typescript-eslint/utils" "^5.10.0" - - eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - - eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - - eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - - eslint-utils@^1.3.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - - eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - - eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - - eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - - eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - - eslint@^5.6.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" - integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.9.1" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^4.0.3" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^5.0.1" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^6.2.2" - js-yaml "^3.13.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.11" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^5.2.3" - text-table "^0.2.0" - - eslint@^8.17.0: - version "8.17.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.17.0.tgz#1cfc4b6b6912f77d24b874ca1506b0fe09328c21" - integrity sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw== - dependencies: - "@eslint/eslintrc" "^1.3.0" - "@humanwhocodes/config-array" "^0.9.2" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.3.2" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.15.0" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - - espree@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" - integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== - dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - - espree@^9.3.2: - version "9.3.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" - integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== - dependencies: - acorn "^8.7.1" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" - - esprima@2.7.x, esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== - - esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - - esquery@^1.0.1, esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - - esrecurse@^4.1.0, esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - - estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== - - estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - - estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - - esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - - etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - - eth-ens-namehash@2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" - integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== - dependencies: - idna-uts46-hx "^2.3.1" - js-sha3 "^0.5.7" - - eth-gas-reporter@^0.2.24: - version "0.2.25" - resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz#546dfa946c1acee93cb1a94c2a1162292d6ff566" - integrity sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ== - dependencies: - "@ethersproject/abi" "^5.0.0-beta.146" - "@solidity-parser/parser" "^0.14.0" - cli-table3 "^0.5.0" - colors "1.4.0" - ethereum-cryptography "^1.0.3" - ethers "^4.0.40" - fs-readdir-recursive "^1.1.0" - lodash "^4.17.14" - markdown-table "^1.1.3" - mocha "^7.1.1" - req-cwd "^2.0.0" - request "^2.88.0" - request-promise-native "^1.0.5" - sha1 "^1.1.1" - sync-request "^6.0.0" - - eth-lib@0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" - integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - xhr-request-promise "^0.1.2" - - eth-lib@^0.1.26: - version "0.1.29" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" - integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - nano-json-stream-parser "^0.1.2" - servify "^0.1.12" - ws "^3.0.0" - xhr-request-promise "^0.1.2" - - ethereum-bloom-filters@^1.0.6: - version "1.0.10" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" - integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== - dependencies: - js-sha3 "^0.8.0" - - ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" - integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== - dependencies: - "@types/pbkdf2" "^3.0.0" - "@types/secp256k1" "^4.0.1" - blakejs "^1.1.0" - browserify-aes "^1.2.0" - bs58check "^2.1.2" - create-hash "^1.2.0" - create-hmac "^1.1.7" - hash.js "^1.1.7" - keccak "^3.0.0" - pbkdf2 "^3.0.17" - randombytes "^2.1.0" - safe-buffer "^5.1.2" - scrypt-js "^3.0.0" - secp256k1 "^4.0.1" - setimmediate "^1.0.5" - - ethereum-cryptography@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.0.3.tgz#b1f8f4e702434b2016248dbb2f9fdd60c54772d8" - integrity sha512-NQLTW0x0CosoVb/n79x/TRHtfvS3hgNUPTUSCu0vM+9k6IIhHFFrAOJReneexjZsoZxMjJHnJn4lrE8EbnSyqQ== - dependencies: - "@noble/hashes" "1.0.0" - "@noble/secp256k1" "1.5.5" - "@scure/bip32" "1.0.1" - "@scure/bip39" "1.0.0" - - ethereumjs-abi@^0.6.8: - version "0.6.8" - resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" - integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== - dependencies: - bn.js "^4.11.8" - ethereumjs-util "^6.0.0" - - ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" - integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== - dependencies: - "@types/bn.js" "^4.11.3" - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" - rlp "^2.2.3" - - ethereumjs-util@^7.0.10, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: - version "7.1.5" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" - integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== - dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - - ethers@^4.0.32, ethers@^4.0.40: - version "4.0.49" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.49.tgz#0eb0e9161a0c8b4761be547396bbe2fb121a8894" - integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== - dependencies: - aes-js "3.0.0" - bn.js "^4.11.9" - elliptic "6.5.4" - hash.js "1.1.3" - js-sha3 "0.5.7" - scrypt-js "2.0.4" - setimmediate "1.0.4" - uuid "2.0.1" - xmlhttprequest "1.8.0" - - ethers@^5.6.8: - version "5.6.8" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.8.tgz#d36b816b4896341a80a8bbd2a44e8cb6e9b98dd4" - integrity sha512-YxIGaltAOdvBFPZwIkyHnXbW40f1r8mHUgapW6dxkO+6t7H6wY8POUn0Kbxrd/N7I4hHxyi7YCddMAH/wmho2w== - dependencies: - "@ethersproject/abi" "5.6.3" - "@ethersproject/abstract-provider" "5.6.1" - "@ethersproject/abstract-signer" "5.6.2" - "@ethersproject/address" "5.6.1" - "@ethersproject/base64" "5.6.1" - "@ethersproject/basex" "5.6.1" - "@ethersproject/bignumber" "5.6.2" - "@ethersproject/bytes" "5.6.1" - "@ethersproject/constants" "5.6.1" - "@ethersproject/contracts" "5.6.2" - "@ethersproject/hash" "5.6.1" - "@ethersproject/hdnode" "5.6.2" - "@ethersproject/json-wallets" "5.6.1" - "@ethersproject/keccak256" "5.6.1" - "@ethersproject/logger" "5.6.0" - "@ethersproject/networks" "5.6.3" - "@ethersproject/pbkdf2" "5.6.1" - "@ethersproject/properties" "5.6.0" - "@ethersproject/providers" "5.6.8" - "@ethersproject/random" "5.6.1" - "@ethersproject/rlp" "5.6.1" - "@ethersproject/sha2" "5.6.1" - "@ethersproject/signing-key" "5.6.2" - "@ethersproject/solidity" "5.6.1" - "@ethersproject/strings" "5.6.1" - "@ethersproject/transactions" "5.6.2" - "@ethersproject/units" "5.6.1" - "@ethersproject/wallet" "5.6.2" - "@ethersproject/web" "5.6.1" - "@ethersproject/wordlists" "5.6.1" - - ethjs-unit@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" - integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== - dependencies: - bn.js "4.11.6" - number-to-bn "1.7.0" - - ethjs-util@0.1.6, ethjs-util@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" - integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== - dependencies: - is-hex-prefixed "1.0.0" - strip-hex-prefix "1.0.0" - - event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - - eventemitter3@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" - integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== - - evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - - execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - - express@^4.14.0: - version "4.18.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" - integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.0" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.10.3" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - - ext@^1.1.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" - integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg== - dependencies: - type "^2.5.0" - - extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - - external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - - extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - - extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - - fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - - fast-glob@^3.0.3, fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - - fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - - fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - - fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - - figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== - dependencies: - escape-string-regexp "^1.0.5" - - file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - - file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - - fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - - finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - - find-replace@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" - integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== - dependencies: - array-back "^3.0.1" - - find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - - find-up@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - - find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - - flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - - flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - - flat@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" - integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== - dependencies: - is-buffer "~2.0.3" - - flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - - flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - - flatted@^3.1.0: - version "3.2.5" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== - - fmix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" - integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== - dependencies: - imul "^1.0.0" - - follow-redirects@^1.12.1: - version "1.15.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" - integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== - - for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - - forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - - form-data@^2.2.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" - integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - - form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - - forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - - fp-ts@1.19.3: - version "1.19.3" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" - integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== - - fp-ts@^1.0.0: - version "1.19.5" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" - integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== - - fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - - fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - - fs-extra@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - - fs-extra@^7.0.0, fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - - fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - - fs-minipass@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - - fs-readdir-recursive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" - integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== - - fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - - fsevents@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - - fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - - function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - - function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - - functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - - functions-have-names@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - - ganache-cli@^6.12.2: - version "6.12.2" - resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.12.2.tgz#c0920f7db0d4ac062ffe2375cb004089806f627a" - integrity sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw== - dependencies: - ethereumjs-util "6.2.1" - source-map-support "0.5.12" - yargs "13.2.4" - - get-caller-file@^2.0.1, get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - - get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== - - get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - - get-port@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" - integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== - - get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== - - get-stream@^4.0.0, get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - - get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - - get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - - getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - - ghost-testrpc@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz#c4de9557b1d1ae7b2d20bbe474a91378ca90ce92" - integrity sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ== - dependencies: - chalk "^2.4.2" - node-emoji "^1.10.0" - - glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - - glob-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - - glob@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - - glob@7.1.7: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - - glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - - glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - - glob@^7.0.0, glob@^7.1.2, glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - - global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - - global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - - global@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" - integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== - dependencies: - min-document "^2.19.0" - process "^0.11.10" - - globals@^11.7.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - - globals@^13.15.0: - version "13.15.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" - integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog== - dependencies: - type-fest "^0.20.2" - - globby@^10.0.1: - version "10.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" - integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - - globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - - got@9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - - got@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" - integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== - dependencies: - decompress-response "^3.2.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-plain-obj "^1.1.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - isurl "^1.0.0-alpha5" - lowercase-keys "^1.0.0" - p-cancelable "^0.3.0" - p-timeout "^1.1.1" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - url-parse-lax "^1.0.0" - url-to-options "^1.0.1" - - graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - - growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - - handlebars@^4.0.1, handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - - har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - - har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - - hardhat-abi-exporter@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/hardhat-abi-exporter/-/hardhat-abi-exporter-2.9.0.tgz#abed78eb910a44b3bff1c850b30baabf8ca148f9" - integrity sha512-OTQoXAunRJzzAkccznPHjLLsufBjb7awpK/WQC/6rV0WLPgkQexflErnKmjhDEwTVw0i0zDybO3aZbB53vhfFw== - dependencies: - "@ethersproject/abi" "^5.5.0" - delete-empty "^3.0.0" - - hardhat-gas-reporter@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.8.tgz#93ce271358cd748d9c4185dbb9d1d5525ec145e0" - integrity sha512-1G5thPnnhcwLHsFnl759f2tgElvuwdkzxlI65fC9PwxYMEe9cmjkVAAWTf3/3y8uP6ZSPiUiOW8PgZnykmZe0g== - dependencies: - array-uniq "1.0.3" - eth-gas-reporter "^0.2.24" - sha1 "^1.1.1" - - hardhat-preprocessor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/hardhat-preprocessor/-/hardhat-preprocessor-0.1.4.tgz#daa3004c3d2cca2ce1b5555c0c9b1940670fd022" - integrity sha512-TeIi9y5xXf6oKa2BMqXAFQV0tAJRy9MKDElu0VrHMsEVpiUXRh47AEJqWkFpWr2lVLFweif40n1RGxGIEFOPXw== - dependencies: - murmur-128 "^0.2.1" - - hardhat-watcher@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/hardhat-watcher/-/hardhat-watcher-2.3.0.tgz#57586a7fb79b73365014794f7e3dc0706aa65b7d" - integrity sha512-u76a/1pxPyW9DRZ7FZ8HoSQ4AuKOiSDQTR2NyiZlH5f0Ux+qQfahsh9CNusRLhx2s1OWzlkwCVvrdHq5FTGUzw== - dependencies: - chokidar "^3.5.3" - - hardhat@^2.9.7: - version "2.9.7" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.9.7.tgz#b31302b089486ec1c13c5a3dff18fe71f955f33b" - integrity sha512-PVSgTlM4Mtc4HNEoISpcM6rRNAK3ngqhxUaTmSw9eCtuVmtxTK86Tqnuq4zNPmlrtcuReXry9k3LGEnk2gJgbA== - dependencies: - "@ethereumjs/block" "^3.6.2" - "@ethereumjs/blockchain" "^5.5.2" - "@ethereumjs/common" "^2.6.4" - "@ethereumjs/tx" "^3.5.1" - "@ethereumjs/vm" "^5.9.0" - "@ethersproject/abi" "^5.1.2" - "@metamask/eth-sig-util" "^4.0.0" - "@sentry/node" "^5.18.1" - "@solidity-parser/parser" "^0.14.1" - "@types/bn.js" "^5.1.0" - "@types/lru-cache" "^5.1.0" - abort-controller "^3.0.0" - adm-zip "^0.4.16" - aggregate-error "^3.0.0" - ansi-escapes "^4.3.0" - chalk "^2.4.2" - chokidar "^3.4.0" - ci-info "^2.0.0" - debug "^4.1.1" - enquirer "^2.3.0" - env-paths "^2.2.0" - ethereum-cryptography "^0.1.2" - ethereumjs-abi "^0.6.8" - ethereumjs-util "^7.1.4" - find-up "^2.1.0" - fp-ts "1.19.3" - fs-extra "^7.0.1" - glob "7.2.0" - immutable "^4.0.0-rc.12" - io-ts "1.10.4" - lodash "^4.17.11" - merkle-patricia-tree "^4.2.4" - mnemonist "^0.38.0" - mocha "^9.2.0" - p-map "^4.0.0" - qs "^6.7.0" - raw-body "^2.4.1" - resolve "1.17.0" - semver "^6.3.0" - slash "^3.0.0" - solc "0.7.3" - source-map-support "^0.5.13" - stacktrace-parser "^0.1.10" - "true-case-path" "^2.2.1" - tsort "0.0.1" - undici "^4.14.1" - uuid "^8.3.2" - ws "^7.4.6" - - has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - - has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== - - has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - - has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - - has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - - has-symbol-support-x@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" - integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== - - has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - - has-to-string-tag-x@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" - integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== - dependencies: - has-symbol-support-x "^1.4.1" - - has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - - has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - - hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - - hash.js@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" - integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.0" - - hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - - he@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - - hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - - http-basic@^8.1.1: - version "8.1.3" - resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" - integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== - dependencies: - caseless "^0.12.0" - concat-stream "^1.6.2" - http-response-object "^3.0.1" - parse-cache-control "^1.0.1" - - http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - - http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - - http-https@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" - integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== - - http-response-object@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" - integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== - dependencies: - "@types/node" "^10.0.3" - - http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - - https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - - husky@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.1.tgz#511cb3e57de3e3190514ae49ed50f6bc3f50b3e9" - integrity sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw== - - iconv-lite@0.4.24, iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - - idna-uts46-hx@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" - integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== - dependencies: - punycode "2.1.0" - - ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - - ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - - ignore@^5.1.1, ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - - immediate@^3.2.3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" - integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== - - immediate@~3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" - integrity sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg== - - immutable@^4.0.0-rc.12: - version "4.1.0" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" - integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== - - import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - - import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - - imul@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" - integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== - - imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - - indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - - inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - - inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - - ini@^1.3.5: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - - inquirer@^6.2.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - - internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - - interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - - invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - - io-ts@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" - integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== - dependencies: - fp-ts "^1.0.0" - - ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - - is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - - is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - - is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - - is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - - is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - - is-buffer@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - - is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== - - is-core-module@^2.8.1: - version "2.9.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" - integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== - dependencies: - has "^1.0.3" - - is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - - is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== - - is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - - is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - - is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - - is-function@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" - integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== - - is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - - is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - - is-hex-prefixed@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" - integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== - - is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - - is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - - is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - - is-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" - integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== - - is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - - is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - - is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - - is-retry-allowed@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - - is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - - is-stream@^1.0.0, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - - is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - - is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - - is-typed-array@^1.1.3, is-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.9.tgz#246d77d2871e7d9f5aeb1d54b9f52c71329ece67" - integrity sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.20.0" - for-each "^0.3.3" - has-tostringtag "^1.0.0" - - is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - - is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - - is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - - isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - - isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - - isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - - isurl@^1.0.0-alpha5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" - integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== - dependencies: - has-to-string-tag-x "^1.2.0" - is-object "^1.0.1" - - js-sha3@0.5.7, js-sha3@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" - integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== - - js-sha3@0.8.0, js-sha3@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - - js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - - js-yaml@3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - - js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - - js-yaml@4.1.0, js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - - jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - - json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== - - json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - - json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - - json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - - json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - - json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - - jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== - optionalDependencies: - graceful-fs "^4.1.6" - - jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - - jsonschema@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" - integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== - - jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - - keccak@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" - integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - readable-stream "^3.6.0" - - keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - - kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - - klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== - optionalDependencies: - graceful-fs "^4.1.9" - - lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - - level-codec@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" - integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== - dependencies: - buffer "^5.6.0" - - level-concat-iterator@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" - integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== - - level-errors@^2.0.0, level-errors@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" - integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== - dependencies: - errno "~0.1.1" - - level-iterator-stream@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" - integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== - dependencies: - inherits "^2.0.4" - readable-stream "^3.4.0" - xtend "^4.0.2" - - level-mem@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" - integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== - dependencies: - level-packager "^5.0.3" - memdown "^5.0.0" - - level-packager@^5.0.3: - version "5.1.1" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" - integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== - dependencies: - encoding-down "^6.3.0" - levelup "^4.3.2" - - level-supports@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" - integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== - dependencies: - xtend "^4.0.2" - - level-ws@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-2.0.0.tgz#207a07bcd0164a0ec5d62c304b4615c54436d339" - integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== - dependencies: - inherits "^2.0.3" - readable-stream "^3.1.0" - xtend "^4.0.1" - - levelup@^4.3.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" - integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== - dependencies: - deferred-leveldown "~5.3.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - - levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - - levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - - locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - - locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - - locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - - lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - - lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - - lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - - log-symbols@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" - - log-symbols@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - - loupe@^2.3.1: - version "2.3.4" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" - integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== - dependencies: - get-func-name "^2.0.0" - - lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - - lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - - lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - - lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - - lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== - - ltgt@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== - - map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - - markdown-table@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" - integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== - - mcl-wasm@^0.7.1: - version "0.7.9" - resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" - integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== - - md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - - media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - - mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - - memdown@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/memdown/-/memdown-5.1.0.tgz#608e91a9f10f37f5b5fe767667a8674129a833cb" - integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== - dependencies: - abstract-leveldown "~6.2.1" - functional-red-black-tree "~1.0.1" - immediate "~3.2.3" - inherits "~2.0.1" - ltgt "~2.2.0" - safe-buffer "~5.2.0" - - memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== - - merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - - merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - - merkle-patricia-tree@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz#ff988d045e2bf3dfa2239f7fabe2d59618d57413" - integrity sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w== - dependencies: - "@types/levelup" "^4.3.0" - ethereumjs-util "^7.1.4" - level-mem "^5.0.1" - level-ws "^2.0.0" - readable-stream "^3.6.0" - semaphore-async-await "^1.5.1" - - methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - - micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - - miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - - mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - - mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - - mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - - mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - - mimic-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - - mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - - min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== - dependencies: - dom-walk "^0.1.0" - - minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - - minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - - "minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - - minimatch@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - - minimatch@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" - integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== - dependencies: - brace-expansion "^1.1.7" - - minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - - minipass@^2.6.0, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - - minizlib@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - - mkdirp-promise@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" - integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== - dependencies: - mkdirp "*" - - mkdirp@*, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - - mkdirp@0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - - mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.5: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - - mnemonist@^0.38.0: - version "0.38.5" - resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" - integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== - dependencies: - obliterator "^2.0.0" - - mocha@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" - integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== - dependencies: - ansi-colors "3.2.3" - browser-stdout "1.3.1" - chokidar "3.3.0" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "3.0.0" - minimatch "3.0.4" - mkdirp "0.5.5" - ms "2.1.1" - node-environment-flags "1.0.6" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" - - mocha@^9.2.0: - version "9.2.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" - integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== - dependencies: - "@ungap/promise-all-settled" "1.1.2" - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.3" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - growl "1.10.5" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "4.2.1" - ms "2.1.3" - nanoid "3.3.1" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - which "2.0.2" - workerpool "6.2.0" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - - mock-fs@^4.1.0: - version "4.14.0" - resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" - integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== - - moment@^2.29.3: - version "2.29.3" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.3.tgz#edd47411c322413999f7a5940d526de183c031f3" - integrity sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw== - - ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - - ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - - ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - - ms@2.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - - multibase@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" - integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - - multibase@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" - integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - - multicodec@^0.5.5: - version "0.5.7" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" - integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== - dependencies: - varint "^5.0.0" - - multicodec@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" - integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== - dependencies: - buffer "^5.6.0" - varint "^5.0.0" - - multihashes@^0.4.15, multihashes@~0.4.15: - version "0.4.21" - resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" - integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== - dependencies: - buffer "^5.5.0" - multibase "^0.7.0" - varint "^5.0.0" - - murmur-128@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" - integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== - dependencies: - encode-utf8 "^1.0.2" - fmix "^0.1.0" - imul "^1.0.0" - - mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ== - - nano-json-stream-parser@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" - integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== - - nanoid@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" - integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== - - natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - - negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - - neo-async@^2.6.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - - next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - - nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - - node-addon-api@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" - integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== - - node-emoji@^1.10.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" - integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== - dependencies: - lodash "^4.17.21" - - node-environment-flags@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" - integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== - dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" - - node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" - integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== - - nofilter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" - integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== - - nopt@3.x: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== - dependencies: - abbrev "1" - - normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - - normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - - npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - - number-to-bn@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" - integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== - dependencies: - bn.js "4.11.6" - strip-hex-prefix "1.0.0" - - oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - - object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - - object-inspect@^1.12.0, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - - object-keys@^1.0.11, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - - object.assign@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - - object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - - object.getownpropertydescriptors@^2.0.3: - version "2.1.4" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz#7965e6437a57278b587383831a9b829455a4bc37" - integrity sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ== - dependencies: - array.prototype.reduce "^1.0.4" - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.1" - - obliterator@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" - integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== - - oboe@2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" - integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== - dependencies: - http-https "^1.0.0" - - on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - - once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - - onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== - dependencies: - mimic-fn "^1.0.0" - - optionator@^0.8.1, optionator@^0.8.2: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - - optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - - os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - - os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - - p-cancelable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" - integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== - - p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - - p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== - - p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - - p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - - p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - - p-limit@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - - p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - - p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.0" - - p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - - p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - - p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - - p-timeout@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" - integrity sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA== - dependencies: - p-finally "^1.0.0" - - p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== - - p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - - parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - - parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - - parse-cache-control@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" - integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== - - parse-headers@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" - integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== - - parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - - parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - - path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - - path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - - path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - - path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== - - path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - - path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - - path-parse@^1.0.6, path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - - path-starts-with@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-starts-with/-/path-starts-with-2.0.0.tgz#ffd6d51926cd497022b44d392196033d5451892f" - integrity sha512-3UHTHbJz5+NLkPafFR+2ycJOjoc4WV2e9qCZCnm71zHiWaFrm1XniLVTkZXvaRgxr1xFh9JsTdicpH2yM03nLA== - - path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - - path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - - pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - - pbkdf2@^3.0.17, pbkdf2@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - - performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - - picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - - pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - - prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - - prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== - - prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg== - - prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== - - prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - - prettier@^1.14.3: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== - - prettier@^2.3.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== - - process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - - process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - - progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - - promise@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" - integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== - dependencies: - asap "~2.0.6" - - proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - - prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== - - psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - - public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - - pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - - punycode@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" - integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== - - punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - - qs@6.10.3, qs@^6.4.0, qs@^6.7.0: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== - dependencies: - side-channel "^1.0.4" - - qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - - query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" - integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - - queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - - randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - - randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - - range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - - raw-body@2.5.1, raw-body@^2.4.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - - readable-stream@^2.2.2: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - - readable-stream@^3.1.0, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - - readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== - dependencies: - picomatch "^2.0.4" - - readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - - rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= - dependencies: - resolve "^1.1.6" - - recursive-readdir@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== - dependencies: - minimatch "3.0.4" - - reduce-flatten@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" - integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== - - regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - - regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - - regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - - req-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" - integrity sha1-1AgrTURZgDZkD7c93qAe1T20nrw= - dependencies: - req-from "^2.0.0" - - req-from@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/req-from/-/req-from-2.0.0.tgz#d74188e47f93796f4aa71df6ee35ae689f3e0e70" - integrity sha1-10GI5H+TeW9Kpx327jWuaJ8+DnA= - dependencies: - resolve-from "^3.0.0" - - request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - - request-promise-native@^1.0.5: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - - request@^2.79.0, request@^2.88.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - - require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - - require-from-string@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - - require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - - resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - - resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - - resolve@1.1.x: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - - resolve@1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - - resolve@^1.1.6: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== - dependencies: - is-core-module "^2.8.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - - responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" - - restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - - reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - - rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - - rimraf@^2.2.8, rimraf@^2.6.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - - rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - - ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - - rlp@^2.2.3, rlp@^2.2.4: - version "2.2.7" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" - integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== - dependencies: - bn.js "^5.2.0" - - run-async@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - - run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - - rustbn.js@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" - integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== - - rxjs@^6.4.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - - safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - - safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - - "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - - sc-istanbul@^0.4.5: - version "0.4.6" - resolved "https://registry.yarnpkg.com/sc-istanbul/-/sc-istanbul-0.4.6.tgz#cf6784355ff2076f92d70d59047d71c13703e839" - integrity sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g== - dependencies: - abbrev "1.0.x" - async "1.x" - escodegen "1.8.x" - esprima "2.7.x" - glob "^5.0.15" - handlebars "^4.0.1" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - once "1.x" - resolve "1.1.x" - supports-color "^3.1.0" - which "^1.1.1" - wordwrap "^1.0.0" - - scrypt-js@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" - integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== - - scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== - - secp256k1@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== - dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - - semaphore-async-await@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" - integrity sha1-hXvvXjZEYBykuVcLh+nfXKEpdPo= - - semver@^5.5.0, semver@^5.5.1, semver@^5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - - semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - - semver@^7.3.4, semver@^7.3.7: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - - send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - - serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - - serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - - servify@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" - integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== - dependencies: - body-parser "^1.16.0" - cors "^2.8.1" - express "^4.14.0" - request "^2.79.0" - xhr "^2.3.3" - - set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - - setimmediate@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" - integrity sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48= - - setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - - setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - - sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - - sha1@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" - integrity sha1-rdqnqTFo85PxnrKxUJFhjicA+Eg= - dependencies: - charenc ">= 0.0.1" - crypt ">= 0.0.1" - - shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - - shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - - shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - - shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - - shelljs@^0.8.3: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - - side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - - signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - - simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - - simple-get@^2.7.0: - version "2.8.2" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" - integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== - dependencies: - decompress-response "^3.3.0" - once "^1.3.1" - simple-concat "^1.0.0" - - slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - - sleep-promise@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/sleep-promise/-/sleep-promise-9.1.0.tgz#101ebe65700bcd184709da95d960967b02b79d03" - integrity sha512-UHYzVpz9Xn8b+jikYSD6bqvf754xL2uBUzDFwiU6NcdZeifPr6UfgU43xpkPu67VMS88+TI2PSI7Eohgqf2fKA== - - slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - - solc@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" - integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== - dependencies: - command-exists "^1.2.8" - commander "3.0.2" - follow-redirects "^1.12.1" - fs-extra "^0.30.0" - js-sha3 "0.8.0" - memorystream "^0.3.1" - require-from-string "^2.0.0" - semver "^5.5.0" - tmp "0.0.33" - - solc@^0.8.16: - version "0.8.16" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.16.tgz#c748fec6a64bf029ec406aa9b37e75938d1115ae" - integrity sha512-Dtidk2XtTTmkB3IKdyeg6wLYopJnBVxdoykN8oP8VY3PQjN16BScYoUJTXFm2OP7P0hXNAqWiJNmmfuELtLf8g== - dependencies: - command-exists "^1.2.8" - commander "^8.1.0" - follow-redirects "^1.12.1" - js-sha3 "0.8.0" - memorystream "^0.3.1" - semver "^5.5.0" - tmp "0.0.33" - - solhint-plugin-prettier@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/solhint-plugin-prettier/-/solhint-plugin-prettier-0.0.5.tgz#e3b22800ba435cd640a9eca805a7f8bc3e3e6a6b" - integrity sha512-7jmWcnVshIrO2FFinIvDQmhQpfpS2rRRn3RejiYgnjIE68xO2bvrYvjqVNfrio4xH9ghOqn83tKuTzLjEbmGIA== - dependencies: - prettier-linter-helpers "^1.0.0" - - solhint@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.3.7.tgz#b5da4fedf7a0fee954cb613b6c55a5a2b0063aa7" - integrity sha512-NjjjVmXI3ehKkb3aNtRJWw55SUVJ8HMKKodwe0HnejA+k0d2kmhw7jvpa+MCTbcEgt8IWSwx0Hu6aCo/iYOZzQ== - dependencies: - "@solidity-parser/parser" "^0.14.1" - ajv "^6.6.1" - antlr4 "4.7.1" - ast-parents "0.0.1" - chalk "^2.4.2" - commander "2.18.0" - cosmiconfig "^5.0.7" - eslint "^5.6.0" - fast-diff "^1.1.2" - glob "^7.1.3" - ignore "^4.0.6" - js-yaml "^3.12.0" - lodash "^4.17.11" - semver "^6.3.0" - optionalDependencies: - prettier "^1.14.3" - - solidity-ast@^0.4.31: - version "0.4.32" - resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.32.tgz#ba613ca24c7c79007798033e8a0f32a71285f09e" - integrity sha512-vCx17410X+NMnpLVyg6ix4NMCHFIkvWrJb1rPBBeQYEQChX93Zgb9WB9NaIY4zpsr3Q8IvAfohw+jmuBzGf8OQ== - - solidity-coverage@^0.7.21: - version "0.7.21" - resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.7.21.tgz#20c5615a3a543086b243c2ca36e2951a75316b40" - integrity sha512-O8nuzJ9yXiKUx3NdzVvHrUW0DxoNVcGzq/I7NzewNO9EZE3wYAQ4l8BwcnV64r4aC/HB6Vnw/q2sF0BQHv/3fg== - dependencies: - "@solidity-parser/parser" "^0.14.0" - "@truffle/provider" "^0.2.24" - chalk "^2.4.2" - death "^1.1.0" - detect-port "^1.3.0" - fs-extra "^8.1.0" - ghost-testrpc "^0.0.2" - global-modules "^2.0.0" - globby "^10.0.1" - jsonschema "^1.2.4" - lodash "^4.17.15" - node-emoji "^1.10.0" - pify "^4.0.1" - recursive-readdir "^2.2.2" - sc-istanbul "^0.4.5" - semver "^7.3.4" - shelljs "^0.8.3" - web3-utils "^1.3.0" - - solidity-docgen@^0.6.0-beta.25: - version "0.6.0-beta.25" - resolved "https://registry.yarnpkg.com/solidity-docgen/-/solidity-docgen-0.6.0-beta.25.tgz#797a4568fdd1a424b66e1ac5abdc993596b7e8aa" - integrity sha512-zKQg1Z7UqF+S/Zq2G2jNxfSYcQPyi/YMjBs+64sRjfUPZ5QtPyLwekUeY9xgCe3NbcnE4d1ipjm0J77hvjQkqA== - dependencies: - handlebars "^4.7.7" - solidity-ast "^0.4.31" - - source-map-support@0.5.12: - version "0.5.12" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" - integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - - source-map-support@^0.5.13: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - - source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - - source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= - dependencies: - amdefine ">=0.0.4" - - sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - - sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - - stacktrace-parser@^0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" - integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== - dependencies: - type-fest "^0.7.1" - - statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - - stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - - strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= - - string-format@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" - integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== - - "string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - - string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - - string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - - string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - - string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - - string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - - string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - - strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - - strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - - strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - - strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - - strip-hex-prefix@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" - integrity sha1-DF8VX+8RUTczd96du1iNoFUA428= - dependencies: - is-hex-prefixed "1.0.0" - - strip-json-comments@2.0.1, strip-json-comments@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - - strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - - supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== - dependencies: - has-flag "^3.0.0" - - supports-color@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - - supports-color@^3.1.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - - supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - - supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - - supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - - swarm-js@^0.1.40: - version "0.1.40" - resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" - integrity sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA== - dependencies: - bluebird "^3.5.0" - buffer "^5.0.5" - eth-lib "^0.1.26" - fs-extra "^4.0.2" - got "^7.1.0" - mime-types "^2.1.16" - mkdirp-promise "^5.0.1" - mock-fs "^4.1.0" - setimmediate "^1.0.5" - tar "^4.0.2" - xhr-request "^1.0.1" - - sync-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" - integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== - dependencies: - http-response-object "^3.0.1" - sync-rpc "^1.2.1" - then-request "^6.0.0" - - sync-rpc@^1.2.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7" - integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== - dependencies: - get-port "^3.1.0" - - table-layout@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" - integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== - dependencies: - array-back "^4.0.1" - deep-extend "~0.6.0" - typical "^5.2.0" - wordwrapjs "^4.0.0" - - table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - - tar@^4.0.2: - version "4.4.19" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" - integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== - dependencies: - chownr "^1.1.4" - fs-minipass "^1.2.7" - minipass "^2.9.0" - minizlib "^1.3.3" - mkdirp "^0.5.5" - safe-buffer "^5.2.1" - yallist "^3.1.1" - - text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - - then-request@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/then-request/-/then-request-6.0.2.tgz#ec18dd8b5ca43aaee5cb92f7e4c1630e950d4f0c" - integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== - dependencies: - "@types/concat-stream" "^1.6.0" - "@types/form-data" "0.0.33" - "@types/node" "^8.0.0" - "@types/qs" "^6.2.31" - caseless "~0.12.0" - concat-stream "^1.6.0" - form-data "^2.2.0" - http-basic "^8.1.1" - http-response-object "^3.0.1" - promise "^8.0.0" - qs "^6.4.0" - - through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - - timed-out@^4.0.0, timed-out@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= - - tmp@0.0.33, tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - - to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - - to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - - toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - - tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - - "true-case-path@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" - integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== - - ts-command-line-args@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz#b6188e42efc6cf7a8898e438a873fbb15505ddd6" - integrity sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g== - dependencies: - chalk "^4.1.0" - command-line-args "^5.1.1" - command-line-usage "^6.1.0" - string-format "^2.0.0" - - ts-essentials@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" - integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== - - tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - - tsort@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" - integrity sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y= - - tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - - tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - - tweetnacl-util@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" - integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== - - tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - - tweetnacl@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - - type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - - type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - - type-detect@^4.0.0, type-detect@^4.0.5: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - - type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - - type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - - type-fest@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" - integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== - - type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - - type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - - type@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f" - integrity sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ== - - typechain@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.1.0.tgz#fc4902ce596519cb2ccfd012e4ddf92a9945b569" - integrity sha512-5jToLgKTjHdI1VKqs/K8BLYy42Sr3o8bV5ojh4MnR9ExHO83cyyUdw+7+vMJCpKXUiVUvARM4qmHTFuyaCMAZQ== - dependencies: - "@types/prettier" "^2.1.1" - debug "^4.3.1" - fs-extra "^7.0.0" - glob "7.1.7" - js-sha3 "^0.8.0" - lodash "^4.17.15" - mkdirp "^1.0.4" - prettier "^2.3.1" - ts-command-line-args "^2.2.0" - ts-essentials "^7.0.1" - - typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - - typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - - typescript@^4.7.3: - version "4.7.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.3.tgz#8364b502d5257b540f9de4c40be84c98e23a129d" - integrity sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA== - - typical@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" - integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== - - typical@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" - integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== - - uglify-js@^3.1.4: - version "3.15.5" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.15.5.tgz#2b10f9e0bfb3f5c15a8e8404393b6361eaeb33b3" - integrity sha512-hNM5q5GbBRB5xB+PMqVRcgYe4c8jbyZ1pzZhS6jbq54/4F2gFK869ZheiE5A8/t+W5jtTNpWef/5Q9zk639FNQ== - - ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== - - unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - - undici@^4.14.1: - version "4.16.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-4.16.0.tgz#469bb87b3b918818d3d7843d91a1d08da357d5ff" - integrity sha512-tkZSECUYi+/T1i4u+4+lwZmQgLXd4BLGlrc7KZPcLIW7Jpq99+Xpc30ONv7nS6F5UNOxp/HBZSSL9MafUrvJbw== - - universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - - unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - - uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - - url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= - dependencies: - prepend-http "^1.0.1" - - url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - - url-set-query@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" - integrity sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk= - - url-to-options@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" - integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= - - utf-8-validate@^5.0.2: - version "5.0.9" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3" - integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q== - dependencies: - node-gyp-build "^4.3.0" - - utf8@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" - integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== - - util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - - util@^0.12.0: - version "0.12.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" - integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - safe-buffer "^5.1.2" - which-typed-array "^1.1.2" - - utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - - uuid@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" - integrity sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w= - - uuid@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== - - uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - - uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - - v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - - varint@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" - integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== - - vary@^1, vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - - verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - - web3-bzz@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.5.3.tgz#e36456905ce051138f9c3ce3623cbc73da088c2b" - integrity sha512-SlIkAqG0eS6cBS9Q2eBOTI1XFzqh83RqGJWnyrNZMDxUwsTVHL+zNnaPShVPvrWQA1Ub5b0bx1Kc5+qJVxsTJg== - dependencies: - "@types/node" "^12.12.6" - got "9.6.0" - swarm-js "^0.1.40" - - web3-core-helpers@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.5.3.tgz#099030235c477aadf39a94199ef40092151d563c" - integrity sha512-Ip1IjB3S8vN7Kf1PPjK41U5gskmMk6IJQlxIVuS8/1U7n/o0jC8krqtpRwiMfAgYyw3TXwBFtxSRTvJtnLyXZw== - dependencies: - web3-eth-iban "1.5.3" - web3-utils "1.5.3" - - web3-core-method@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.5.3.tgz#6cff97ed19fe4ea2e9183d6f703823a079f5132c" - integrity sha512-8wJrwQ2qD9ibWieF9oHXwrJsUGrv3XAtEkNeyvyNMpktNTIjxJ2jaFGQUuLiyUrMubD18XXgLk4JS6PJU4Loeg== - dependencies: - "@ethereumjs/common" "^2.4.0" - "@ethersproject/transactions" "^5.0.0-beta.135" - web3-core-helpers "1.5.3" - web3-core-promievent "1.5.3" - web3-core-subscriptions "1.5.3" - web3-utils "1.5.3" - - web3-core-promievent@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.5.3.tgz#3f11833c3dc6495577c274350b61144e0a4dba01" - integrity sha512-CFfgqvk3Vk6PIAxtLLuX+pOMozxkKCY+/GdGr7weMh033mDXEPvwyVjoSRO1PqIKj668/hMGQsVoIgbyxkJ9Mg== - dependencies: - eventemitter3 "4.0.4" - - web3-core-requestmanager@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.5.3.tgz#b339525815fd40e3a2a81813c864ddc413f7b6f7" - integrity sha512-9k/Bze2rs8ONix5IZR+hYdMNQv+ark2Ek2kVcrFgWO+LdLgZui/rn8FikPunjE+ub7x7pJaKCgVRbYFXjo3ZWg== - dependencies: - util "^0.12.0" - web3-core-helpers "1.5.3" - web3-providers-http "1.5.3" - web3-providers-ipc "1.5.3" - web3-providers-ws "1.5.3" - - web3-core-subscriptions@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.5.3.tgz#d7d69c4caad65074212028656e9dc56ca5c2159d" - integrity sha512-L2m9vG1iRN6thvmv/HQwO2YLhOQlmZU8dpLG6GSo9FBN14Uch868Swk0dYVr3rFSYjZ/GETevSXU+O+vhCummA== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.5.3" - - web3-core@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.5.3.tgz#59f8728b27c8305b349051326aa262b9b7e907bf" - integrity sha512-ACTbu8COCu+0eUNmd9pG7Q9EVsNkAg2w3Y7SqhDr+zjTgbSHZV01jXKlapm9z+G3AN/BziV3zGwudClJ4u4xXQ== - dependencies: - "@types/bn.js" "^4.11.5" - "@types/node" "^12.12.6" - bignumber.js "^9.0.0" - web3-core-helpers "1.5.3" - web3-core-method "1.5.3" - web3-core-requestmanager "1.5.3" - web3-utils "1.5.3" - - web3-eth-abi@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.5.3.tgz#5aea9394d797f99ca0d9bd40c3417eb07241c96c" - integrity sha512-i/qhuFsoNrnV130CSRYX/z4SlCfSQ4mHntti5yTmmQpt70xZKYZ57BsU0R29ueSQ9/P+aQrL2t2rqkQkAloUxg== - dependencies: - "@ethersproject/abi" "5.0.7" - web3-utils "1.5.3" - - web3-eth-accounts@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.5.3.tgz#076c816ff4d68c9dffebdc7fd2bfaddcfc163d77" - integrity sha512-pdGhXgeBaEJENMvRT6W9cmji3Zz/46ugFSvmnLLw79qi5EH7XJhKISNVb41eWCrs4am5GhI67GLx5d2s2a72iw== - dependencies: - "@ethereumjs/common" "^2.3.0" - "@ethereumjs/tx" "^3.2.1" - crypto-browserify "3.12.0" - eth-lib "0.2.8" - ethereumjs-util "^7.0.10" - scrypt-js "^3.0.1" - uuid "3.3.2" - web3-core "1.5.3" - web3-core-helpers "1.5.3" - web3-core-method "1.5.3" - web3-utils "1.5.3" - - web3-eth-contract@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.5.3.tgz#12b03a4a16ce583a945f874bea2ff2fb4c5b81ad" - integrity sha512-Gdlt1L6cdHe83k7SdV6xhqCytVtOZkjD0kY/15x441AuuJ4JLubCHuqu69k2Dr3tWifHYVys/vG8QE/W16syGg== - dependencies: - "@types/bn.js" "^4.11.5" - web3-core "1.5.3" - web3-core-helpers "1.5.3" - web3-core-method "1.5.3" - web3-core-promievent "1.5.3" - web3-core-subscriptions "1.5.3" - web3-eth-abi "1.5.3" - web3-utils "1.5.3" - - web3-eth-ens@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.5.3.tgz#ef6eee1ddf32b1ff9536fc7c599a74f2656bafe1" - integrity sha512-QmGFFtTGElg0E+3xfCIFhiUF+1imFi9eg/cdsRMUZU4F1+MZCC/ee+IAelYLfNTGsEslCqfAusliKOT9DdGGnw== - dependencies: - content-hash "^2.5.2" - eth-ens-namehash "2.0.8" - web3-core "1.5.3" - web3-core-helpers "1.5.3" - web3-core-promievent "1.5.3" - web3-eth-abi "1.5.3" - web3-eth-contract "1.5.3" - web3-utils "1.5.3" - - web3-eth-iban@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.5.3.tgz#91b1475893a877b10eac1de5cce6eb379fb81b5d" - integrity sha512-vMzmGqolYZvRHwP9P4Nf6G8uYM5aTLlQu2a34vz78p0KlDC+eV1th3+90Qeaupa28EG7OO0IT1F0BejiIauOPw== - dependencies: - bn.js "^4.11.9" - web3-utils "1.5.3" - - web3-eth-personal@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.5.3.tgz#4ebe09e9a77dd49d23d93b36b36cfbf4a6dae713" - integrity sha512-JzibJafR7ak/Icas8uvos3BmUNrZw1vShuNR5Cxjo+vteOC8XMqz1Vr7RH65B4bmlfb3bm9xLxetUHO894+Sew== - dependencies: - "@types/node" "^12.12.6" - web3-core "1.5.3" - web3-core-helpers "1.5.3" - web3-core-method "1.5.3" - web3-net "1.5.3" - web3-utils "1.5.3" - - web3-eth@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.5.3.tgz#d7d1ac7198f816ab8a2088c01e0bf1eda45862fe" - integrity sha512-saFurA1L23Bd7MEf7cBli6/jRdMhD4X/NaMiO2mdMMCXlPujoudlIJf+VWpRWJpsbDFdu7XJ2WHkmBYT5R3p1Q== - dependencies: - web3-core "1.5.3" - web3-core-helpers "1.5.3" - web3-core-method "1.5.3" - web3-core-subscriptions "1.5.3" - web3-eth-abi "1.5.3" - web3-eth-accounts "1.5.3" - web3-eth-contract "1.5.3" - web3-eth-ens "1.5.3" - web3-eth-iban "1.5.3" - web3-eth-personal "1.5.3" - web3-net "1.5.3" - web3-utils "1.5.3" - - web3-net@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.5.3.tgz#545fee49b8e213b0c55cbe74ffd0295766057463" - integrity sha512-0W/xHIPvgVXPSdLu0iZYnpcrgNnhzHMC888uMlGP5+qMCt8VuflUZHy7tYXae9Mzsg1kxaJAS5lHVNyeNw4CoQ== - dependencies: - web3-core "1.5.3" - web3-core-method "1.5.3" - web3-utils "1.5.3" - - web3-providers-http@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.5.3.tgz#74f170fc3d79eb7941d9fbc34e2a067d61ced0b2" - integrity sha512-5DpUyWGHtDAr2RYmBu34Fu+4gJuBAuNx2POeiJIooUtJ+Mu6pIx4XkONWH6V+Ez87tZAVAsFOkJRTYuzMr3rPw== - dependencies: - web3-core-helpers "1.5.3" - xhr2-cookies "1.1.0" - - web3-providers-ipc@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.5.3.tgz#4bd7f5e445c2f3c2595fce0929c72bb879320a3f" - integrity sha512-JmeAptugVpmXI39LGxUSAymx0NOFdgpuI1hGQfIhbEAcd4sv7fhfd5D+ZU4oLHbRI8IFr4qfGU0uhR8BXhDzlg== - dependencies: - oboe "2.1.5" - web3-core-helpers "1.5.3" - - web3-providers-ws@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.5.3.tgz#eec6cfb32bb928a4106de506f13a49070a21eabf" - integrity sha512-6DhTw4Q7nm5CFYEUHOJM0gAb3xFx+9gWpVveg3YxJ/ybR1BUvEWo3bLgIJJtX56cYX0WyY6DS35a7f0LOI1kVg== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.5.3" - websocket "^1.0.32" - - web3-shh@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.5.3.tgz#3c04aa4cda9ba0b746d7225262401160f8e38b13" - integrity sha512-COfEXfsqoV/BkcsNLRxQqnWc1Teb8/9GxdGag5GtPC5gQC/vsN+7hYVJUwNxY9LtJPKYTij2DHHnx6UkITng+Q== - dependencies: - web3-core "1.5.3" - web3-core-method "1.5.3" - web3-core-subscriptions "1.5.3" - web3-net "1.5.3" - - web3-utils@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.5.3.tgz#e914c9320cd663b2a09a5cb920ede574043eb437" - integrity sha512-56nRgA+Ad9SEyCv39g36rTcr5fpsd4L9LgV3FK0aB66nAMazLAA6Qz4lH5XrUKPDyBIPGJIR+kJsyRtwcu2q1Q== - dependencies: - bn.js "^4.11.9" - eth-lib "0.2.8" - ethereum-bloom-filters "^1.0.6" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - - web3-utils@^1.3.0: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.3.tgz#b214d05f124530d8694ad364509ac454d05f207c" - integrity sha512-g6nQgvb/bUpVUIxJE+ezVN+rYwYmlFyMvMIRSuqpi1dk6ApDD00YNArrk7sPcZnjvxOJ76813Xs2vIN2rgh4lg== - dependencies: - bn.js "^4.11.9" - ethereum-bloom-filters "^1.0.6" - ethereumjs-util "^7.1.0" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - - web3@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.5.3.tgz#11882679453c645bf33620fbc255a243343075aa" - integrity sha512-eyBg/1K44flfv0hPjXfKvNwcUfIVDI4NX48qHQe6wd7C8nPSdbWqo9vLy6ksZIt9NLa90HjI8HsGYgnMSUxn6w== - dependencies: - web3-bzz "1.5.3" - web3-core "1.5.3" - web3-eth "1.5.3" - web3-eth-personal "1.5.3" - web3-net "1.5.3" - web3-shh "1.5.3" - web3-utils "1.5.3" - - websocket@^1.0.32: - version "1.0.34" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" - integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.50" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" - - which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - - which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - - which-typed-array@^1.1.2: - version "1.1.8" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.8.tgz#0cfd53401a6f334d90ed1125754a42ed663eb01f" - integrity sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.20.0" - for-each "^0.3.3" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.9" - - which@1.3.1, which@^1.1.1, which@^1.2.9, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - - which@2.0.2, which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - - wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - - word-wrap@^1.2.3, word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - - wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - - wordwrapjs@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" - integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== - dependencies: - reduce-flatten "^2.0.0" - typical "^5.2.0" - - workerpool@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" - integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== - - wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - - wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - - wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - - write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - - ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - - ws@^3.0.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - - ws@^7.4.6: - version "7.5.8" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.8.tgz#ac2729881ab9e7cbaf8787fe3469a48c5c7f636a" - integrity sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw== - - xhr-request-promise@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" - integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== - dependencies: - xhr-request "^1.1.0" - - xhr-request@^1.0.1, xhr-request@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" - integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== - dependencies: - buffer-to-arraybuffer "^0.0.5" - object-assign "^4.1.1" - query-string "^5.0.1" - simple-get "^2.7.0" - timed-out "^4.0.1" - url-set-query "^1.0.0" - xhr "^2.0.4" - - xhr2-cookies@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" - integrity sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg= - dependencies: - cookiejar "^2.1.1" - - xhr@^2.0.4, xhr@^2.3.3: - version "2.6.0" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" - integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== - dependencies: - global "~4.4.0" - is-function "^1.0.1" - parse-headers "^2.0.0" - xtend "^4.0.0" - - xmlhttprequest@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" - integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= - - xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - - y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - - y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - - yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= - - yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - - yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - - yargs-parser@13.1.2, yargs-parser@^13.1.0, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - - yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - - yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - - yargs-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== - dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" - - yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - - yargs@13.2.4: - version "13.2.4" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" - integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - os-locale "^3.1.0" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.0" - - yargs@13.3.2, yargs@^13.3.0: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - - yargs@16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - - yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From dd94852dd37f9f73102a65e663c16b0f92eefabd Mon Sep 17 00:00:00 2001 From: Jordan Hagan Date: Mon, 8 Jan 2024 13:04:31 +1100 Subject: [PATCH 2/2] finish legacy removal refactor --- .gas-auctionhandler-snapshot-per-function | 48 ----- .gas-per-legacy-function-snapshot | 91 -------- .gas-snapshot | 34 --- .storage-auctionhandler-layout | 195 ------------------ .storage-legacy-layout | 240 ---------------------- Error Codes.txt | 60 ------ script/legacy-script/EOADeploy.s.sol | 54 ----- script/legacy-script/UUPSDeploy.s.sol | 116 ----------- test/PFLHelper.t.sol | 52 +++++ test/PFL_AuctionHandler.t.sol | 2 +- 10 files changed, 53 insertions(+), 839 deletions(-) delete mode 100644 .gas-auctionhandler-snapshot-per-function delete mode 100644 .gas-per-legacy-function-snapshot delete mode 100644 .gas-snapshot delete mode 100644 .storage-auctionhandler-layout delete mode 100644 .storage-legacy-layout delete mode 100644 Error Codes.txt delete mode 100644 script/legacy-script/EOADeploy.s.sol delete mode 100644 script/legacy-script/UUPSDeploy.s.sol create mode 100644 test/PFLHelper.t.sol diff --git a/.gas-auctionhandler-snapshot-per-function b/.gas-auctionhandler-snapshot-per-function deleted file mode 100644 index 92103c7..0000000 --- a/.gas-auctionhandler-snapshot-per-function +++ /dev/null @@ -1,48 +0,0 @@ -╭──────────────────────────────────────────────────────────────┬─────────────────┬───────┬────────┬────────┬─────────╮ -│ contracts/jit-relay/FastLaneRelay.sol:FastLaneRelay contract ┆ ┆ ┆ ┆ ┆ │ -╞══════════════════════════════════════════════════════════════╪═════════════════╪═══════╪════════╪════════╪═════════╡ -│ Deployment Cost ┆ Deployment Size ┆ ┆ ┆ ┆ │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ 1633364 ┆ 8192 ┆ ┆ ┆ ┆ │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ Function Name ┆ min ┆ avg ┆ median ┆ max ┆ # calls │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ enableRelayValidator ┆ 2739 ┆ 48055 ┆ 70714 ┆ 70714 ┆ 3 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ fallback ┆ 55 ┆ 55 ┆ 55 ┆ 55 ┆ 2 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ flStakeShareRatio ┆ 381 ┆ 381 ┆ 381 ┆ 381 ┆ 1 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ getCurrentStakeBalance ┆ 327 ┆ 327 ┆ 327 ┆ 327 ┆ 2 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ getValidatorBalance ┆ 639 ┆ 639 ┆ 639 ┆ 639 ┆ 2 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ humanizeError ┆ 4247 ┆ 4247 ┆ 4247 ┆ 4247 ┆ 2 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ submitFlashBid ┆ 4704 ┆ 45898 ┆ 38373 ┆ 188811 ┆ 15 │ -╰──────────────────────────────────────────────────────────────┴─────────────────┴───────┴────────┴────────┴─────────╯ -╭─────────────────────────────────────────────────────────────────────────────────────┬─────────────────┬───────┬────────┬───────┬─────────╮ -│ contracts/jit-searcher/FastLaneSearcherWrapper.sol:SearcherContractExample contract ┆ ┆ ┆ ┆ ┆ │ -╞═════════════════════════════════════════════════════════════════════════════════════╪═════════════════╪═══════╪════════╪═══════╪═════════╡ -│ Deployment Cost ┆ Deployment Size ┆ ┆ ┆ ┆ │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ 540171 ┆ 2532 ┆ ┆ ┆ ┆ │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ Function Name ┆ min ┆ avg ┆ median ┆ max ┆ # calls │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ anAddress ┆ 337 ┆ 337 ┆ 337 ┆ 337 ┆ 1 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ anAmount ┆ 285 ┆ 285 ┆ 285 ┆ 285 ┆ 1 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ approveFastLaneEOA ┆ 22716 ┆ 22716 ┆ 22716 ┆ 22716 ┆ 1 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ doFail ┆ 343 ┆ 343 ┆ 343 ┆ 343 ┆ 1 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ doStuff ┆ 44688 ┆ 44688 ┆ 44688 ┆ 44688 ┆ 3 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ fastLaneCall ┆ 2769 ┆ 43357 ┆ 60626 ┆ 78850 ┆ 5 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ owner ┆ 404 ┆ 404 ┆ 404 ┆ 404 ┆ 1 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ setPFLAuctionAddress ┆ 22655 ┆ 22655 ┆ 22655 ┆ 22655 ┆ 1 │ -╰─────────────────────────────────────────────────────────────────────────────────────┴─────────────────┴───────┴────────┴───────┴─────────╯ \ No newline at end of file diff --git a/.gas-per-legacy-function-snapshot b/.gas-per-legacy-function-snapshot deleted file mode 100644 index c978533..0000000 --- a/.gas-per-legacy-function-snapshot +++ /dev/null @@ -1,91 +0,0 @@ -╭────────────────────────────────────────────────────────┬─────────────────┬────────┬────────┬────────┬─────────╮ -│ contracts/legacy/FastLaneLegacyAuction.sol:FastLaneAuction contract ┆ ┆ ┆ ┆ ┆ │ -╞════════════════════════════════════════════════════════╪═════════════════╪════════╪════════╪════════╪═════════╡ -│ Deployment Cost ┆ Deployment Size ┆ ┆ ┆ ┆ │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ 2800332 ┆ 13628 ┆ ┆ ┆ ┆ │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ Function Name ┆ min ┆ avg ┆ median ┆ max ┆ # calls │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ MAX_AUCTION_VALUE ┆ 339 ┆ 339 ┆ 339 ┆ 339 ┆ 2 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ auction_number ┆ 422 ┆ 422 ┆ 422 ┆ 422 ┆ 5 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ bid_increment ┆ 428 ┆ 983 ┆ 428 ┆ 2428 ┆ 18 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ checker ┆ 769 ┆ 4603 ┆ 3989 ┆ 10852 ┆ 17 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ disableOpportunityAddress ┆ 2842 ┆ 2946 ┆ 2965 ┆ 3013 ┆ 4 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ disableValidatorAddress ┆ 2841 ┆ 2926 ┆ 2926 ┆ 3012 ┆ 2 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ enableOpportunityAddress ┆ 3047 ┆ 41345 ┆ 47043 ┆ 52947 ┆ 17 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ enableValidatorAddress ┆ 3780 ┆ 50753 ┆ 54183 ┆ 56183 ┆ 14 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ enableValidatorAddressWithPreferences ┆ 7032 ┆ 87717 ┆ 100832 ┆ 102832 ┆ 7 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ endAuction ┆ 8032 ┆ 16093 ┆ 20039 ┆ 27792 ┆ 21 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ fast_lane_fee ┆ 419 ┆ 419 ┆ 419 ┆ 419 ┆ 3 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ findFinalizedAuctionWinnerAtAuction ┆ 1412 ┆ 2407 ┆ 2407 ┆ 3402 ┆ 2 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ findLastFinalizedAuctionWinner ┆ 1558 ┆ 1558 ┆ 1558 ┆ 1558 ┆ 1 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ findLiveAuctionTopBid ┆ 1872 ┆ 1872 ┆ 1872 ┆ 1872 ┆ 2 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ getActivePrivilegesAuctionNumber ┆ 617 ┆ 617 ┆ 617 ┆ 617 ┆ 2 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ getAutopayJobs ┆ 5169 ┆ 6530 ┆ 5566 ┆ 11393 ┆ 7 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ getCheckpoint ┆ 1267 ┆ 1267 ┆ 1267 ┆ 1267 ┆ 13 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ getPreferences ┆ 887 ┆ 887 ┆ 887 ┆ 887 ┆ 1 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ getStatus ┆ 1251 ┆ 1251 ┆ 1251 ┆ 1251 ┆ 2 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ getValidatorsactiveAtAuctionRound ┆ 1421 ┆ 1758 ┆ 1674 ┆ 2180 ┆ 3 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ initialSetupAuction ┆ 4902 ┆ 73935 ┆ 77569 ┆ 77569 ┆ 20 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ outstandingFLBalance ┆ 362 ┆ 362 ┆ 362 ┆ 362 ┆ 4 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ owner ┆ 443 ┆ 443 ┆ 443 ┆ 443 ┆ 1 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ processAutopayJobs ┆ 4228 ┆ 29932 ┆ 30648 ┆ 55296 ┆ 5 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ redeemOutstandingBalance ┆ 4762 ┆ 19416 ┆ 27925 ┆ 31112 ┆ 11 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ setAutopayBatchSize ┆ 1894 ┆ 1894 ┆ 1894 ┆ 1894 ┆ 3 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ setBidToken ┆ 4813 ┆ 4813 ┆ 4813 ┆ 4813 ┆ 1 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ setFastlaneFee ┆ 4748 ┆ 8163 ┆ 8846 ┆ 8846 ┆ 6 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ setMinimumAutoShipThreshold ┆ 3935 ┆ 5135 ┆ 3935 ┆ 8735 ┆ 4 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ setMinimumBidIncrement ┆ 1611 ┆ 4061 ┆ 4061 ┆ 6511 ┆ 2 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ setOffchainCheckerDisabledState ┆ 730 ┆ 730 ┆ 730 ┆ 730 ┆ 2 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ setOps ┆ 6706 ┆ 6706 ┆ 6706 ┆ 6706 ┆ 1 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ setPausedState ┆ 8669 ┆ 8669 ┆ 8669 ┆ 8669 ┆ 1 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ setResolverMaxGasPrice ┆ 1836 ┆ 1836 ┆ 1836 ┆ 1836 ┆ 2 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ setStarter ┆ 4734 ┆ 4734 ┆ 4734 ┆ 4734 ┆ 1 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ setValidatorPreferences ┆ 1008 ┆ 11103 ┆ 2829 ┆ 47242 ┆ 5 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ startAuction ┆ 593 ┆ 4496 ┆ 4893 ┆ 10893 ┆ 29 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ submitBid ┆ 610 ┆ 139246 ┆ 194186 ┆ 288071 ┆ 41 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ transferOwnership ┆ 2415 ┆ 2415 ┆ 2415 ┆ 2415 ┆ 1 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ withdrawStuckERC20 ┆ 3753 ┆ 15491 ┆ 15491 ┆ 27229 ┆ 2 │ -├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤ -│ withdrawStuckNativeToken ┆ 13588 ┆ 13588 ┆ 13588 ┆ 13588 ┆ 1 │ -╰────────────────────────────────────────────────────────┴─────────────────┴────────┴────────┴────────┴─────────╯ \ No newline at end of file diff --git a/.gas-snapshot b/.gas-snapshot deleted file mode 100644 index 4261cc5..0000000 --- a/.gas-snapshot +++ /dev/null @@ -1,34 +0,0 @@ -PFLAuctionHandlerTest:testCollectFees() (gas: 482081) -PFLAuctionHandlerTest:testGetValidatorRecipient() (gas: 143259) -PFLAuctionHandlerTest:testPayValidatorFeeRevertsWithZeroValue() (gas: 16143) -PFLAuctionHandlerTest:testPayeeCannotSetPayeeIfBeforeTimelock() (gas: 144395) -PFLAuctionHandlerTest:testRandomUserCannotSetValidatorsPayee() (gas: 13297) -PFLAuctionHandlerTest:testSimulateFlashBid() (gas: 177787) -PFLAuctionHandlerTest:testSubmitFlashBid() (gas: 1122416) -PFLAuctionHandlerTest:testSyncNativeTokenCanOnlyBeCalledByValidators() (gas: 88218) -PFLAuctionHandlerTest:testSyncNativeTokenDoesNotIncreaseBalanceIfNoExcess() (gas: 72784) -PFLAuctionHandlerTest:testValidatorCanSetPayee() (gas: 141883) -PFLAuctionHandlerTest:testValidatorCannotSetPayeeIfZeroBalance() (gas: 16699) -PFLAuctionHandlerTest:testValidatorsPayeeCanSetPayee() (gas: 152884) -PFLAuctionHandlerTest:testWithdrawStuckERC20CanOnlyBeCalledByValidators() (gas: 813260) -PFLAuctionHandlerTest:testWithdrawStuckERC20DoesNotIncreaseBalanceIfNoExcess() (gas: 798005) -PFLAuctionHandlerTest:testWrongSearcherRepay() (gas: 535559) -PFLAuctionTest:testAutoshipThreshold() (gas: 20675) -PFLAuctionTest:testBidIncrement() (gas: 651276) -PFLAuctionTest:testBidToken() (gas: 15424) -PFLAuctionTest:testEmergencyWithdraw() (gas: 768838) -PFLAuctionTest:testEnabledDisabledPairs() (gas: 882271) -PFLAuctionTest:testFeeUpdate() (gas: 485661) -PFLAuctionTest:testGasChecker() (gas: 576258) -PFLAuctionTest:testGelatoAutoship() (gas: 1805583) -PFLAuctionTest:testPausedState() (gas: 37465) -PFLAuctionTest:testRedeemableOutstanding() (gas: 1167770) -PFLAuctionTest:testReinitSetup() (gas: 18164) -PFLAuctionTest:testStartProcessSingleOutBidAuction() (gas: 1092645) -PFLAuctionTest:testStartProcessStopMultipleEmptyAuctions() (gas: 276125) -PFLAuctionTest:testStartStopNoBidAuction() (gas: 71287) -PFLAuctionTest:testValidatorCheckpoint() (gas: 195365) -PFLAuctionTest:testValidatorPreferences() (gas: 541958) -PFLAuctionTest:testValidatorWithdrawals() (gas: 1788213) -PFLDeployTest:testDeploy() (gas: 426707) -PFLDeployTest:testUpgrade() (gas: 3993467) \ No newline at end of file diff --git a/.storage-auctionhandler-layout b/.storage-auctionhandler-layout deleted file mode 100644 index 1ac5d13..0000000 --- a/.storage-auctionhandler-layout +++ /dev/null @@ -1,195 +0,0 @@ -INFO:Slither-read-storage: -Contract Ownable not found in storage layout. It is possibly a parent contract - -INFO:Slither-read-storage: -Contract 'ERC20' -ERC20.name with type string is located at slot: 0 - -INFO:Slither-read-storage: -Name: name -Type: string -Slot: 0 - -INFO:Slither-read-storage: -Contract 'ERC20' -ERC20.symbol with type string is located at slot: 1 - -INFO:Slither-read-storage: -Name: symbol -Type: string -Slot: 1 - -INFO:Slither-read-storage: -Contract 'ERC20' -ERC20.totalSupply with type uint256 is located at slot: 2 - -INFO:Slither-read-storage: -Name: totalSupply -Type: uint256 -Slot: 2 - -INFO:Slither-read-storage: -Contract 'ERC20' -ERC20.balanceOf with type mapping(address => uint256) is located at slot: 3 - -INFO:Slither-read-storage: -Name: balanceOf -Type: mapping(address => uint256) -Slot: 3 - -INFO:Slither-read-storage: -Contract 'ERC20' -ERC20.allowance with type mapping(address => mapping(address => uint256)) is located at slot: 4 - -INFO:Slither-read-storage: -Name: allowance -Type: mapping(address => mapping(address => uint256)) -Slot: 4 - -INFO:Slither-read-storage: -Contract 'ERC20' -ERC20.nonces with type mapping(address => uint256) is located at slot: 5 - -INFO:Slither-read-storage: -Name: nonces -Type: mapping(address => uint256) -Slot: 5 - -INFO:Slither-read-storage: -Contract ReentrancyGuard not found in storage layout. It is possibly a parent contract - -INFO:Slither-read-storage: -Contract 'FastLaneRelay' -Ownable._owner with type address is located at slot: 0 - -INFO:Slither-read-storage: -Name: _owner -Type: address -Slot: 0 - -INFO:Slither-read-storage: -Contract 'FastLaneRelay' -ReentrancyGuard.locked with type uint256 is located at slot: 1 - -INFO:Slither-read-storage: -Name: locked -Type: uint256 -Slot: 1 - -INFO:Slither-read-storage: -Contract 'FastLaneRelay' -FastLaneRelay.validatorsStatusMap with type mapping(address => bool) is located at slot: 2 - -INFO:Slither-read-storage: -Name: validatorsStatusMap -Type: mapping(address => bool) -Slot: 2 - -INFO:Slither-read-storage: -Contract 'FastLaneRelay' -FastLaneRelay.validatorsDataMap with type mapping(address => ValidatorData) is located at slot: 3 - -INFO:Slither-read-storage: -Name: validatorsDataMap -Type: mapping(address => ValidatorData) -Slot: 3 - -INFO:Slither-read-storage: -Contract 'FastLaneRelay' -FastLaneRelay.validatorsBalanceMap with type mapping(address => uint256) is located at slot: 4 - -INFO:Slither-read-storage: -Name: validatorsBalanceMap -Type: mapping(address => uint256) -Slot: 4 - -INFO:Slither-read-storage: -Contract 'FastLaneRelay' -FastLaneRelay.fulfilledAuctionsMap with type mapping(bytes32 => uint256) is located at slot: 5 - -INFO:Slither-read-storage: -Name: fulfilledAuctionsMap -Type: mapping(bytes32 => uint256) -Slot: 5 - -INFO:Slither-read-storage: -Contract 'FastLaneRelay' -FastLaneRelay.validatorsTotal with type uint256 is located at slot: 6 - -INFO:Slither-read-storage: -Name: validatorsTotal -Type: uint256 -Slot: 6 - -INFO:Slither-read-storage: -Contract 'FastLaneRelay' -FastLaneRelay.flStakeSharePayable with type uint256 is located at slot: 7 - -INFO:Slither-read-storage: -Name: flStakeSharePayable -Type: uint256 -Slot: 7 - -INFO:Slither-read-storage: -Contract 'FastLaneRelay' -FastLaneRelay.flStakeShareRatio with type uint24 is located at slot: 8 - -INFO:Slither-read-storage: -Name: flStakeShareRatio -Type: uint24 -Slot: 8 - -INFO:Slither-read-storage: -Contract 'FastLaneRelay' -FastLaneRelay.proposalStakeShareRatio with type uint24 is located at slot: 8 - -INFO:Slither-read-storage: -Name: proposalStakeShareRatio -Type: uint24 -Slot: 8 - -INFO:Slither-read-storage: -Contract 'FastLaneRelay' -FastLaneRelay.proposalDeadline with type uint256 is located at slot: 9 - -INFO:Slither-read-storage: -Name: proposalDeadline -Type: uint256 -Slot: 9 - -INFO:Slither-read-storage: -Contract 'FastLaneRelay' -FastLaneRelay.minRelayBidAmount with type uint256 is located at slot: 10 - -INFO:Slither-read-storage: -Name: minRelayBidAmount -Type: uint256 -Slot: 10 - -INFO:Slither-read-storage: -Contract 'FastLaneRelay' -FastLaneRelay.pendingStakeShareUpdate with type bool is located at slot: 11 - -INFO:Slither-read-storage: -Name: pendingStakeShareUpdate -Type: bool -Slot: 11 - -INFO:Slither-read-storage: -Contract 'FastLaneRelay' -FastLaneRelay.paused with type bool is located at slot: 11 - -INFO:Slither-read-storage: -Name: paused -Type: bool -Slot: 11 - -INFO:Slither-read-storage: -Contract 'FastLaneRelay' -FastLaneRelay.RESTRICT_EOA with type bool is located at slot: 11 - -INFO:Slither-read-storage: -Name: RESTRICT_EOA -Type: bool -Slot: 11 - diff --git a/.storage-legacy-layout b/.storage-legacy-layout deleted file mode 100644 index 083f6b6..0000000 --- a/.storage-legacy-layout +++ /dev/null @@ -1,240 +0,0 @@ -INFO:Slither-read-storage: -Contract Ownable not found in storage layout. It is possibly a parent contract - -INFO:Slither-read-storage: -Contract ReentrancyGuard not found in storage layout. It is possibly a parent contract - -INFO:Slither-read-storage: -Contract 'ERC20' -ERC20.name with type string is located at slot: 0 - -INFO:Slither-read-storage: -Name: name -Type: string -Slot: 0 - -INFO:Slither-read-storage: -Contract 'ERC20' -ERC20.symbol with type string is located at slot: 1 - -INFO:Slither-read-storage: -Name: symbol -Type: string -Slot: 1 - -INFO:Slither-read-storage: -Contract 'ERC20' -ERC20.totalSupply with type uint256 is located at slot: 2 - -INFO:Slither-read-storage: -Name: totalSupply -Type: uint256 -Slot: 2 - -INFO:Slither-read-storage: -Contract 'ERC20' -ERC20.balanceOf with type mapping(address => uint256) is located at slot: 3 - -INFO:Slither-read-storage: -Name: balanceOf -Type: mapping(address => uint256) -Slot: 3 - -INFO:Slither-read-storage: -Contract 'ERC20' -ERC20.allowance with type mapping(address => mapping(address => uint256)) is located at slot: 4 - -INFO:Slither-read-storage: -Name: allowance -Type: mapping(address => mapping(address => uint256)) -Slot: 4 - -INFO:Slither-read-storage: -Contract 'ERC20' -ERC20.nonces with type mapping(address => uint256) is located at slot: 5 - -INFO:Slither-read-storage: -Name: nonces -Type: mapping(address => uint256) -Slot: 5 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -Ownable._owner with type address is located at slot: 0 - -INFO:Slither-read-storage: -Name: _owner -Type: address -Slot: 0 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -ReentrancyGuard._status with type uint256 is located at slot: 1 - -INFO:Slither-read-storage: -Name: _status -Type: uint256 -Slot: 1 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -FastLaneAuction.bid_token with type ERC20 is located at slot: 2 - -INFO:Slither-read-storage: -Name: bid_token -Type: ERC20 -Slot: 2 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -FastLaneAuction.ops with type address is located at slot: 3 - -INFO:Slither-read-storage: -Name: ops -Type: address -Slot: 3 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -FastLaneAuction.bid_increment with type uint256 is located at slot: 4 - -INFO:Slither-read-storage: -Name: bid_increment -Type: uint256 -Slot: 4 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -FastLaneAuction.minAutoShipThreshold with type uint128 is located at slot: 5 - -INFO:Slither-read-storage: -Name: minAutoShipThreshold -Type: uint128 -Slot: 5 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -FastLaneAuction.auction_number with type uint128 is located at slot: 5 - -INFO:Slither-read-storage: -Name: auction_number -Type: uint128 -Slot: 5 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -FastLaneAuction.max_gas_price with type uint128 is located at slot: 6 - -INFO:Slither-read-storage: -Name: max_gas_price -Type: uint128 -Slot: 6 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -FastLaneAuction.fast_lane_fee with type uint24 is located at slot: 6 - -INFO:Slither-read-storage: -Name: fast_lane_fee -Type: uint24 -Slot: 6 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -FastLaneAuction.autopay_batch_size with type uint16 is located at slot: 6 - -INFO:Slither-read-storage: -Name: autopay_batch_size -Type: uint16 -Slot: 6 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -FastLaneAuction.auction_live with type bool is located at slot: 6 - -INFO:Slither-read-storage: -Name: auction_live -Type: bool -Slot: 6 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -FastLaneAuction._paused with type bool is located at slot: 6 - -INFO:Slither-read-storage: -Name: _paused -Type: bool -Slot: 6 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -FastLaneAuction._offchain_checker_disabled with type bool is located at slot: 6 - -INFO:Slither-read-storage: -Name: _offchain_checker_disabled -Type: bool -Slot: 6 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -FastLaneAuction.statusMap with type mapping(address => Status) is located at slot: 7 - -INFO:Slither-read-storage: -Name: statusMap -Type: mapping(address => Status) -Slot: 7 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -FastLaneAuction.auctionsMap with type mapping(uint256 => mapping(address => mapping(address => Bid))) is located at slot: 8 - -INFO:Slither-read-storage: -Name: auctionsMap -Type: mapping(uint256 => mapping(address => mapping(address => Bid))) -Slot: 8 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -FastLaneAuction.validatorsactiveAtAuctionRound with type mapping(uint128 => EnumerableSet.AddressSet) is located at slot: 9 - -INFO:Slither-read-storage: -Name: validatorsactiveAtAuctionRound -Type: mapping(uint128 => EnumerableSet.AddressSet) -Slot: 9 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -FastLaneAuction.validatorsCheckpoints with type mapping(address => ValidatorBalanceCheckpoint) is located at slot: 10 - -INFO:Slither-read-storage: -Name: validatorsCheckpoints -Type: mapping(address => ValidatorBalanceCheckpoint) -Slot: 10 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -FastLaneAuction.validatorsPreferences with type mapping(address => ValidatorPreferences) is located at slot: 11 - -INFO:Slither-read-storage: -Name: validatorsPreferences -Type: mapping(address => ValidatorPreferences) -Slot: 11 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -FastLaneAuction.outstandingFLBalance with type uint256 is located at slot: 12 - -INFO:Slither-read-storage: -Name: outstandingFLBalance -Type: uint256 -Slot: 12 - -INFO:Slither-read-storage: -Contract 'FastLaneAuction' -FastLaneAuction.auctionStarter with type address is located at slot: 13 - -INFO:Slither-read-storage: -Name: auctionStarter -Type: address -Slot: 13 - diff --git a/Error Codes.txt b/Error Codes.txt deleted file mode 100644 index 9c457a6..0000000 --- a/Error Codes.txt +++ /dev/null @@ -1,60 +0,0 @@ - -Categories: - 0. General - 1. Permission & Control - 2. Find, Inequalities & Range - 3. Availability & Time - 4. Tokens, Funds & Finance - - - -Codes: - - 0. General - E-000 - Failure - E-001 - Success - E-002 - ALREADY_INIT - E-003 - Requires Migration - E-004 - Already Migrated - - 1. Permission & Control - E-100 - [--Unused--] - E-101 - PAUSED - E-102 - NOT_OWNER, transfer of token that is not own - E-103 - Only send bids from the payor EOA - E-104 - Must be validator - E-105 - Invalid opportunity address - Submit via discord - E-106 - Only Gelato - E-107 - Only owner or starter role - - 2. Find, Inequalities & Range - E-200 - [--Unused--] - E-201 - INVALID_INDEX, - E-202 - address mismatch - E-203 - bid too low - E-205 - already top bidder - E-206 - not enough funds - E-207 - nothing to redeem - E-208 - wrong batch size - E-209 - Validator disabled at this time - E-210 - Opportunity disabled at this time - E-211 - Validator not yet enabled - E-212 - Opportunity not yet enabled - E-213 - Too high - - 3. Availability & Time - E-300 - [--Unused--] - E-301 - not when auction is live - E-302 - not when auction is stopped - E-303 - [--Unused--] - E-304 - [--Unused--] - E-305 - [--Unused--] - E-306 - [--Unused--] - E-307 - gas not suitable - - - 4. Tokens, Funds & Finance - E-400 - [--Unused--] - E-401 - TRANSFER_FAILED, SEND_FAILED - E-402 - funds remain - diff --git a/script/legacy-script/EOADeploy.s.sol b/script/legacy-script/EOADeploy.s.sol deleted file mode 100644 index 9de12a4..0000000 --- a/script/legacy-script/EOADeploy.s.sol +++ /dev/null @@ -1,54 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-only -pragma solidity ^0.8.15; - -import "forge-std/Test.sol"; -import "forge-std/Script.sol"; - -import {FastLaneLegacyAuction} from "../../contracts/legacy/FastLaneLegacyAuction.sol"; - -contract Deploy is Script { - - - address public fastlane; - - mapping(uint256 => address) public gelatoOpsAddresses; - mapping(uint256 => address) public wrappedNativeAddresses; - - - function getArgs() public view returns (address initial_bid_token, address ops) { - ops = gelatoOpsAddresses[block.chainid]; - initial_bid_token = wrappedNativeAddresses[block.chainid]; - } - - function run() public { - - gelatoOpsAddresses[1] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F; - gelatoOpsAddresses[137] = 0x527a819db1eb0e34426297b03bae11F2f8B3A19E; - gelatoOpsAddresses[80001] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F; - gelatoOpsAddresses[31337] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F; - - wrappedNativeAddresses[1] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; - wrappedNativeAddresses[137] = 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270; - wrappedNativeAddresses[80001] = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889; - wrappedNativeAddresses[31337] = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889; - - - (address initial_bid_token, address ops) = getArgs(); - - - require(ops != address(0), "O(o)ps"); - require(initial_bid_token != address(0), "Wrapped"); - - // Unusable until vm.remember: https://github.com/foundry-rs/foundry/pull/2299 - // uint256 deployerPrivateKey = vm.deriveKey(vm.envString("TESTNET_MNEMONIC"), 0); - // vm.startBroadcast(vm.addr(deployerPrivateKey)); - - vm.startBroadcast(); - fastlane = address(new FastLaneLegacyAuction(msg.sender)); - - FastLaneLegacyAuction(fastlane).initialSetupAuction(initial_bid_token, ops, msg.sender); - - console2.log(fastlane); - } - -} \ No newline at end of file diff --git a/script/legacy-script/UUPSDeploy.s.sol b/script/legacy-script/UUPSDeploy.s.sol deleted file mode 100644 index c4a113a..0000000 --- a/script/legacy-script/UUPSDeploy.s.sol +++ /dev/null @@ -1,116 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-only -pragma solidity 0.8.16; - -import "forge-std/Test.sol"; -import "forge-std/Script.sol"; - -import {FastLaneLegacyAuction} from "../../contracts/legacy/FastLaneLegacyAuction.sol"; -import {ERC1967Proxy} from "openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol"; - -contract Deploy is Script { - - - address public fastlaneImplementation; - - mapping(uint256 => address) public gelatoOpsAddresses; - mapping(uint256 => address) public wrappedNativeAddresses; - - - function getArgs() public view returns (address initial_bid_token, address ops) { - ops = gelatoOpsAddresses[block.chainid]; - initial_bid_token = wrappedNativeAddresses[block.chainid]; - } - - function run() public { - - gelatoOpsAddresses[1] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F; - gelatoOpsAddresses[137] = 0x527a819db1eb0e34426297b03bae11F2f8B3A19E; - gelatoOpsAddresses[80001] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F; - gelatoOpsAddresses[31337] = 0xB3f5503f93d5Ef84b06993a1975B9D21B962892F; - - wrappedNativeAddresses[1] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; - wrappedNativeAddresses[137] = 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270; - wrappedNativeAddresses[80001] = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889; - wrappedNativeAddresses[31337] = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889; - - - (address initial_bid_token, address ops) = getArgs(); - - - require(ops != address(0), "O(o)ps"); - require(initial_bid_token != address(0), "Wrapped"); - - vm.startBroadcast(); - - bytes32 proxySaltStr = 0xb225d27dc65c353234f5c8ec7c01d2a08967b60d774b801949184d7dfe8a1b9f; - bytes32 implementationSaltStr = 0x2141af04bf09baab736a447148a230ae150f8f6fc929d6c6f2ccc364f364fb5a; // 0x111be7a544ba60d162f5d75ea6bda7254d650d8b - - address foundryFactory = 0x4e59b44847b379578588920cA78FbF26c0B4956C; - - address eoa = msg.sender; - - - console2.log("CREATE2 Implementation Predict Bytecode:"); - // Copy this into init_code_implementation.txt - console2.logBytes(abi.encodePacked(type(FastLaneLegacyAuction).creationCode, abi.encode(eoa))); - - - FastLaneLegacyAuction FLAImplementation = new FastLaneLegacyAuction{salt: implementationSaltStr}(eoa); // 0x111be7a544ba60d162f5d75ea6bda7254d650d8b - fastlaneImplementation = address(FLAImplementation); - - console2.log("Implementation Deployed at:"); - console2.log(fastlaneImplementation); - console2.log(fastlaneImplementation.code.length); - console2.log("------------------------------------"); - - console2.log("Current Sender:"); - console2.log(msg.sender); - console2.log("------------------------------------"); - - // Call that will be made after deploy of Proxy - // will transfer ownership to `eoa` after receiving it from `foundryFactory` - bytes memory encodedPostProxyDeployCall = abi.encodeWithSignature("initialize(address)", eoa); - - console2.log("encodedPostProxyDeployCall Bytecode:"); - console2.logBytes(encodedPostProxyDeployCall); - - - - console2.log("------------------------------------"); - ERC1967Proxy proxy = new ERC1967Proxy{salt: proxySaltStr}(fastlaneImplementation, encodedPostProxyDeployCall); - - - console2.log("Proxy Bytecode:"); - console2.logBytes(address(proxy).code); - console2.log("------------------------------------"); - - console2.log("CREATE2 Proxy Predict Bytecode:"); - // Copy this into init_code.txt - console2.logBytes(abi.encodePacked(type(ERC1967Proxy).creationCode, abi.encode(fastlaneImplementation,encodedPostProxyDeployCall))); - - - console2.log("Deployed Proxy @:"); - address deployedProxyAddress = address(proxy); - console2.log(deployedProxyAddress); - console2.log("------------------------------------"); - - address expectedProxyAddress = 0xfa571A11e01d7759B816B41B5018432B2D202043; - require(deployedProxyAddress == expectedProxyAddress, "Wrong Addresses"); - - // (bool successInitializeProxy,) = address(proxy).call(abi.encodeWithSignature("initialize()")); - - // Setup the FastlaneAuction through the proxy. - address STARTER_ROLE = msg.sender; // Change me - (bool successInitialSetupAuction, bytes memory returnSetupData) = deployedProxyAddress.call(abi.encodeWithSignature("initialSetupAuction(address,address,address)", initial_bid_token, ops, STARTER_ROLE)); - - console2.log("initialSetupAuction call:"); - console2.log(successInitialSetupAuction); - console2.log(string(returnSetupData)); - console2.log("------------------------------------"); - console2.log(fastlaneImplementation.code.length); - console2.log("------------------------------------"); - - require(successInitialSetupAuction,"Proxy calls fail"); - } - -} \ No newline at end of file diff --git a/test/PFLHelper.t.sol b/test/PFLHelper.t.sol new file mode 100644 index 0000000..c7ef6f5 --- /dev/null +++ b/test/PFLHelper.t.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.15; + +import "contracts/interfaces/IWMatic.sol"; +import "forge-std/Test.sol"; +import "openzeppelin-contracts/contracts/utils/Address.sol"; +import "openzeppelin-contracts/contracts/utils/Strings.sol"; + +abstract contract PFLHelper is Test { + using Address for address payable; + + address constant MUMBAI_MATIC = 0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889; + address constant OPS_ADDRESS = address(0xBEEF); + WMATIC public wMatic; + + address public OWNER = 0xa401DCcD23DCdbc7296bDfb8A6c8d61106711CA6; + + address public BIDDER1 = 0xc71E2Df87C93bC3Ddba80e14406F3880E3D19D3e; + + address public BIDDER2 = 0x174237f20a0925d5eFEA401e5279181f0b7515EE; + address public BIDDER3 = 0xFba52cDB2B36eCc27ac229b8feb2455B6aE3014b; + address public BIDDER4 = 0xc4208Be0F01C8DBB57D0269887ccD5D269dEFf3B; + + address public VALIDATOR1 = 0x8149d8a0aCE8c058a679a1Fd4257aA1F1d2b9103; + address public VALIDATOR2 = 0x161c3421Da27CD26E3c46Eb5711743343d17352d; + address public VALIDATOR3 = 0x60d86bBFD061A359fd3B3E6Ef422b74B886f9a4a; + address public VALIDATOR4 = 0x68F248c6B7820B191E4ed18c3d618ba7aC527C99; + + address public OPPORTUNITY1 = 0x8af6F6CA42171fc823619AC33a9A6C1892CA980B; + address public OPPORTUNITY2 = 0x6eD132ea309B432FD49C9e70bc4F8Da429022F77; + address public OPPORTUNITY3 = 0x8fcB7fb5e84847029Ba3e055BE46b86a4693AE40; + address public OPPORTUNITY4 = 0x29D59575e85282c05112BEEC53fFadE66d3c7CD1; + + address public BROKE_BIDDER = 0xD057089743dc1461b1099Dee7A8CB848E361f6d9; + address public BROKE_SEARCHER = 0xD057089743dc1461b1099Dee7A8CB848E361f6d9; + + address public SEARCHER_ADDRESS1 = 0x14BA06E061ada0443dbE5c7617A529Dd791c3146; + address public SEARCHER_ADDRESS2 = 0x428a87F9c0ed1Bb9cdCE42f606e030ba40a525f3; + address public SEARCHER_ADDRESS3 = 0x791e001586B75B8880bC6D02f2Ee19D42ec23E18; + address public SEARCHER_ADDRESS4 = 0x4BF8fC74846da2dc54cCfd1f4fFac595939399e4; + + address public REFUND_RECIPIENT = 0xFdE9601264EBB3B664B7E37E9D3487D8fabB9001; + + address[] public BIDDERS = [BIDDER1, BIDDER2, BIDDER3, BIDDER4]; + + address[] public SEARCHERS = [SEARCHER_ADDRESS1, SEARCHER_ADDRESS2, SEARCHER_ADDRESS3, SEARCHER_ADDRESS4]; + + address[] public VALIDATORS = [VALIDATOR1, VALIDATOR2, VALIDATOR3, VALIDATOR4]; + address[] public OPPORTUNITIES = [OPPORTUNITY1, OPPORTUNITY2, OPPORTUNITY3, OPPORTUNITY4]; + + constructor() {} +} diff --git a/test/PFL_AuctionHandler.t.sol b/test/PFL_AuctionHandler.t.sol index 32ceee8..740add5 100644 --- a/test/PFL_AuctionHandler.t.sol +++ b/test/PFL_AuctionHandler.t.sol @@ -16,7 +16,7 @@ import "contracts/interfaces/IWMatic.sol"; import { MockERC20 } from "solmate/test/utils/mocks/MockERC20.sol"; -import { PFLHelper } from "./legacy-test/PFLAuction.t.sol"; +import { PFLHelper } from "./PFLHelper.t.sol"; import "contracts/auction-handler/FastLaneAuctionHandler.sol";