diff --git a/specs/fjord/derivation.md b/specs/fjord/derivation.md index f66560571..f804bebb9 100644 --- a/specs/fjord/derivation.md +++ b/specs/fjord/derivation.md @@ -199,7 +199,7 @@ jq -r ".bytecode.object" packages/contracts-bedrock/forge-artifacts/GasPriceOrac ``` This transaction MUST deploy a contract with the following code hash -`0x58e192326ee67ed52b7add91e4640024cbd1b21528a0ff1e1d21b7ca54e3ee62`. +`0xa8682d0cb2cf24478bda32c1058ed3ca741134c5a319e80f29a30f45fe5b8245`. ## GasPriceOracle Proxy Update diff --git a/specs/fjord/predeploys.md b/specs/fjord/predeploys.md index e4cb661f3..32fe0db38 100644 --- a/specs/fjord/predeploys.md +++ b/specs/fjord/predeploys.md @@ -33,10 +33,11 @@ This is implemented as follows: ```solidity function getL1FeeUpperBound(uint256 unsignedTxSize) external view returns (uint256) { - // txSize / 255 + 16 is the pratical fastlz upper-bound covers 99.99% txs. // Add 68 to account for unsigned tx - int256 flzUpperBound = int256(unsignedTxSize) + int256(unsignedTxSize) / 255 + 16 + 68; - + uint256 txSize = unsignedTxSize + 68; + // txSize / 255 + 16 is the pratical fastlz upper-bound covers 99.99% txs. + uint256 flzUpperBound = txSize + txSize / 255 + 16; + int256 estimatedSize = costIntercept + costFastlzCoef * flzUpperBound; if (estimatedSize < minTransactionSize) { estimatedSize = minTransactionSize; diff --git a/specs/static/bytecode/fjord-gas-price-oracle-deployment.txt b/specs/static/bytecode/fjord-gas-price-oracle-deployment.txt index 700a3fcef..c518bfd0a 100644 --- a/specs/static/bytecode/fjord-gas-price-oracle-deployment.txt +++ b/specs/static/bytecode/fjord-gas-price-oracle-deployment.txt @@ -1 +1 @@ -0x608060405234801561001057600080fd5b50611951806100206000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80636ef25c3a116100b2578063de26c4a111610081578063f45e65d811610066578063f45e65d81461025b578063f820614014610263578063fe173b971461020d57600080fd5b8063de26c4a114610235578063f1c7a58b1461024857600080fd5b80636ef25c3a1461020d5780638e98b10614610213578063960e3a231461021b578063c59859181461022d57600080fd5b806349948e0e11610109578063519b4bd3116100ee578063519b4bd31461019f57806354fd4d50146101a757806368d5dca6146101f057600080fd5b806349948e0e1461016f5780634ef6e2241461018257600080fd5b80630c18c1621461013b57806322b90ab3146101565780632e0f262514610160578063313ce56714610168575b600080fd5b61014361026b565b6040519081526020015b60405180910390f35b61015e61038c565b005b610143600681565b6006610143565b61014361017d3660046113c6565b6105af565b60005461018f9060ff1681565b604051901515815260200161014d565b610143610600565b6101e36040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b60405161014d9190611495565b6101f8610661565b60405163ffffffff909116815260200161014d565b48610143565b61015e6106e6565b60005461018f90610100900460ff1681565b6101f861097a565b6101436102433660046113c6565b6109db565b610143610256366004611508565b610ad5565b610143610ba5565b610143610c98565b6000805460ff1615610304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f47617350726963654f7261636c653a206f76657268656164282920697320646560448201527f707265636174656400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103879190611521565b905090565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663e591b2826040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040f919061153a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f47617350726963654f7261636c653a206f6e6c7920746865206465706f73697460448201527f6f72206163636f756e742063616e2073657420697345636f746f6e6520666c6160648201527f6700000000000000000000000000000000000000000000000000000000000000608482015260a4016102fb565b60005460ff1615610582576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f47617350726963654f7261636c653a2045636f746f6e6520616c72656164792060448201527f616374697665000000000000000000000000000000000000000000000000000060648201526084016102fb565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008054610100900460ff16156105e3576105dd6105cc83610cf9565b516105d890604461159f565b61101e565b92915050565b60005460ff16156105f7576105dd826110b0565b6105dd82611154565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16635cf249696040518163ffffffff1660e01b8152600401602060405180830381865afa158015610363573d6000803e3d6000fd5b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff166368d5dca66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106c2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038791906115b7565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663e591b2826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610745573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610769919061153a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f47617350726963654f7261636c653a206f6e6c7920746865206465706f73697460448201527f6f72206163636f756e742063616e20736574206973466a6f726420666c61670060648201526084016102fb565b60005460ff166108b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f47617350726963654f7261636c653a20466a6f72642063616e206f6e6c79206260448201527f65206163746976617465642061667465722045636f746f6e650000000000000060648201526084016102fb565b600054610100900460ff161561094c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f47617350726963654f7261636c653a20466a6f726420616c726561647920616360448201527f746976650000000000000000000000000000000000000000000000000000000060648201526084016102fb565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663c59859186040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106c2573d6000803e3d6000fd5b60008054610100900460ff1615610a2257620f4240610a0d6109fc84610cf9565b51610a0890604461159f565b6112a8565b610a189060106115dd565b6105dd919061161a565b6000610a2d83611307565b60005490915060ff1615610a415792915050565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac49190611521565b610ace908261159f565b9392505050565b60008054610100900460ff16610b6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f47617350726963654f7261636c653a206765744c314665655570706572426f7560448201527f6e64206f6e6c7920737570706f72747320466a6f72640000000000000000000060648201526084016102fb565b6000610b7a60ff8461161a565b610b84908461159f565b610b8f90601061159f565b610b9a90604461159f565b9050610ace8161101e565b6000805460ff1615610c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f47617350726963654f7261636c653a207363616c61722829206973206465707260448201527f656361746564000000000000000000000000000000000000000000000000000060648201526084016102fb565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16639e8c49666040518163ffffffff1660e01b8152600401602060405180830381865afa158015610363573d6000803e3d6000fd5b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663f82061406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610363573d6000803e3d6000fd5b6060610e90565b818153600101919050565b600082840393505b83811015610ace5782810151828201511860001a1590930292600101610d13565b825b60208210610d80578251610d4b601f83610d00565b52602092909201917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090910190602101610d36565b8115610ace578251610d956001840383610d00565b520160010192915050565b60006001830392505b6101078210610de157610dd38360ff16610dce60fd610dce8760081c60e00189610d00565b610d00565b935061010682039150610da9565b60078210610e0e57610e078360ff16610dce60078503610dce8760081c60e00189610d00565b9050610ace565b610e278360ff16610dce8560081c8560051b0187610d00565b949350505050565b610e88828203610e6c610e5c84600081518060001a8160011a60081b178160021a60101b17915050919050565b639e3779b90260131c611fff1690565b8060021b6040510182815160e01c1860e01b8151188152505050565b600101919050565b6180003860405139618000604051016020830180600d8551820103826002015b81811015610fc3576000805b50508051604051600082901a600183901a60081b1760029290921a60101b91909117639e3779b9810260111c617ffc16909101805160e081811c878603811890911b90911890915284019081830390848410610f185750610f53565b600184019350611fff8211610f4d578251600081901a600182901a60081b1760029190911a60101b178103610f4d5750610f53565b50610ebc565b838310610f61575050610fc3565b60018303925085831115610f7f57610f7c8787888603610d34565b96505b610f93600985016003850160038501610d0b565b9150610fa0878284610da0565b965050610fb884610fb386848601610e2f565b610e2f565b915050809350610eb0565b5050610fd58383848851850103610d34565b925050506040519150618000820180820391508183526020830160005b8381101561100a578281015182820152602001610ff2565b506000920191825250602001604052919050565b60008061102a836112a8565b90506000611036610c98565b61103e610661565b63ffffffff1661104e91906115dd565b611056610600565b61105e61097a565b611069906010611655565b63ffffffff1661107991906115dd565b611083919061159f565b9050611091600660026115dd565b61109c90600a6117a1565b6110a682846115dd565b610e27919061161a565b6000806110bc83611307565b905060006110c8610600565b6110d061097a565b6110db906010611655565b63ffffffff166110eb91906115dd565b905060006110f7610c98565b6110ff610661565b63ffffffff1661110f91906115dd565b9050600061111d828461159f565b61112790856115dd565b90506111356006600a6117a1565b6111409060106115dd565b61114a908261161a565b9695505050505050565b60008061116083611307565b9050600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16639e8c49666040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e79190611521565b6111ef610600565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa15801561124e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112729190611521565b61127c908561159f565b61128691906115dd565b61129091906115dd565b905061129e6006600a6117a1565b610e27908261161a565b6000806112b883620cc3946115dd565b6112e2907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7632006117ad565b90506112f26064620f4240611821565b8112156105dd57610ace6064620f4240611821565b80516000908190815b8181101561138a5784818151811061132a5761132a6118dd565b01602001517fff000000000000000000000000000000000000000000000000000000000000001660000361136a5761136360048461159f565b9250611378565b61137560108461159f565b92505b806113828161190c565b915050611310565b50610e278261044061159f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156113d857600080fd5b813567ffffffffffffffff808211156113f057600080fd5b818401915084601f83011261140457600080fd5b81358181111561141657611416611397565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561145c5761145c611397565b8160405282815287602084870101111561147557600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208083528351808285015260005b818110156114c2578581018301518582016040015282016114a6565b818111156114d4576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561151a57600080fd5b5035919050565b60006020828403121561153357600080fd5b5051919050565b60006020828403121561154c57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610ace57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156115b2576115b2611570565b500190565b6000602082840312156115c957600080fd5b815163ffffffff81168114610ace57600080fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561161557611615611570565b500290565b600082611650577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600063ffffffff8083168185168183048111821515161561167857611678611570565b02949350505050565b600181815b808511156116da57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156116c0576116c0611570565b808516156116cd57918102915b93841c9390800290611686565b509250929050565b6000826116f1575060016105dd565b816116fe575060006105dd565b8160018114611714576002811461171e5761173a565b60019150506105dd565b60ff84111561172f5761172f611570565b50506001821b6105dd565b5060208310610133831016604e8410600b841016171561175d575081810a6105dd565b6117678383611681565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561179957611799611570565b029392505050565b6000610ace83836116e2565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156117e7576117e7611570565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561181b5761181b611570565b50500190565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561186257611862611570565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561189d5761189d611570565b600087129250878205871284841616156118b9576118b9611570565b878505871281841616156118cf576118cf611570565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361193d5761193d611570565b506001019056fea164736f6c634300080f000a \ No newline at end of file +0x608060405234801561001057600080fd5b50611960806100206000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80636ef25c3a116100b2578063de26c4a111610081578063f45e65d811610066578063f45e65d81461025b578063f820614014610263578063fe173b971461020d57600080fd5b8063de26c4a114610235578063f1c7a58b1461024857600080fd5b80636ef25c3a1461020d5780638e98b10614610213578063960e3a231461021b578063c59859181461022d57600080fd5b806349948e0e11610109578063519b4bd3116100ee578063519b4bd31461019f57806354fd4d50146101a757806368d5dca6146101f057600080fd5b806349948e0e1461016f5780634ef6e2241461018257600080fd5b80630c18c1621461013b57806322b90ab3146101565780632e0f262514610160578063313ce56714610168575b600080fd5b61014361026b565b6040519081526020015b60405180910390f35b61015e61038c565b005b610143600681565b6006610143565b61014361017d3660046113d5565b6105af565b60005461018f9060ff1681565b604051901515815260200161014d565b6101436105ec565b6101e36040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b60405161014d91906114a4565b6101f861064d565b60405163ffffffff909116815260200161014d565b48610143565b61015e6106d2565b60005461018f90610100900460ff1681565b6101f8610966565b6101436102433660046113d5565b6109c7565b610143610256366004611517565b610ac1565b610143610b9d565b610143610c90565b6000805460ff1615610304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f47617350726963654f7261636c653a206f76657268656164282920697320646560448201527f707265636174656400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103879190611530565b905090565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663e591b2826040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040f9190611549565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f47617350726963654f7261636c653a206f6e6c7920746865206465706f73697460448201527f6f72206163636f756e742063616e2073657420697345636f746f6e6520666c6160648201527f6700000000000000000000000000000000000000000000000000000000000000608482015260a4016102fb565b60005460ff1615610582576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f47617350726963654f7261636c653a2045636f746f6e6520616c72656164792060448201527f616374697665000000000000000000000000000000000000000000000000000060648201526084016102fb565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008054610100900460ff16156105cf576105c982610cf1565b92915050565b60005460ff16156105e3576105c982610d10565b6105c982610db4565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16635cf249696040518163ffffffff1660e01b8152600401602060405180830381865afa158015610363573d6000803e3d6000fd5b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff166368d5dca66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610387919061157f565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663e591b2826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610731573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107559190611549565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f47617350726963654f7261636c653a206f6e6c7920746865206465706f73697460448201527f6f72206163636f756e742063616e20736574206973466a6f726420666c61670060648201526084016102fb565b60005460ff166108a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f47617350726963654f7261636c653a20466a6f72642063616e206f6e6c79206260448201527f65206163746976617465642061667465722045636f746f6e650000000000000060648201526084016102fb565b600054610100900460ff1615610938576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f47617350726963654f7261636c653a20466a6f726420616c726561647920616360448201527f746976650000000000000000000000000000000000000000000000000000000060648201526084016102fb565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663c59859186040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ae573d6000803e3d6000fd5b60008054610100900460ff1615610a0e57620f42406109f96109e884610f08565b516109f49060446115d4565b611225565b610a049060106115ec565b6105c99190611629565b6000610a1983611284565b60005490915060ff1615610a2d5792915050565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab09190611530565b610aba90826115d4565b9392505050565b60008054610100900460ff16610b59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f47617350726963654f7261636c653a206765744c314665655570706572426f7560448201527f6e64206f6e6c7920737570706f72747320466a6f72640000000000000000000060648201526084016102fb565b6000610b668360446115d4565b90506000610b7560ff83611629565b610b7f90836115d4565b610b8a9060106115d4565b9050610b9581611314565b949350505050565b6000805460ff1615610c31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f47617350726963654f7261636c653a207363616c61722829206973206465707260448201527f656361746564000000000000000000000000000000000000000000000000000060648201526084016102fb565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16639e8c49666040518163ffffffff1660e01b8152600401602060405180830381865afa158015610363573d6000803e3d6000fd5b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663f82061406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610363573d6000803e3d6000fd5b60006105c9610cff83610f08565b51610d0b9060446115d4565b611314565b600080610d1c83611284565b90506000610d286105ec565b610d30610966565b610d3b906010611664565b63ffffffff16610d4b91906115ec565b90506000610d57610c90565b610d5f61064d565b63ffffffff16610d6f91906115ec565b90506000610d7d82846115d4565b610d8790856115ec565b9050610d956006600a6117b0565b610da09060106115ec565b610daa9082611629565b9695505050505050565b600080610dc083611284565b9050600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16639e8c49666040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e479190611530565b610e4f6105ec565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed29190611530565b610edc90856115d4565b610ee691906115ec565b610ef091906115ec565b9050610efe6006600a6117b0565b610b959082611629565b6060611097565b818153600101919050565b600082840393505b83811015610aba5782810151828201511860001a1590930292600101610f22565b825b60208210610f8f578251610f5a601f83610f0f565b52602092909201917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090910190602101610f45565b8115610aba578251610fa46001840383610f0f565b520160010192915050565b60006001830392505b6101078210610ff057610fe28360ff16610fdd60fd610fdd8760081c60e00189610f0f565b610f0f565b935061010682039150610fb8565b6007821061101d576110168360ff16610fdd60078503610fdd8760081c60e00189610f0f565b9050610aba565b610b958360ff16610fdd8560081c8560051b0187610f0f565b61108f82820361107361106384600081518060001a8160011a60081b178160021a60101b17915050919050565b639e3779b90260131c611fff1690565b8060021b6040510182815160e01c1860e01b8151188152505050565b600101919050565b6180003860405139618000604051016020830180600d8551820103826002015b818110156111ca576000805b50508051604051600082901a600183901a60081b1760029290921a60101b91909117639e3779b9810260111c617ffc16909101805160e081811c878603811890911b9091189091528401908183039084841061111f575061115a565b600184019350611fff8211611154578251600081901a600182901a60081b1760029190911a60101b178103611154575061115a565b506110c3565b8383106111685750506111ca565b60018303925085831115611186576111838787888603610f43565b96505b61119a600985016003850160038501610f1a565b91506111a7878284610faf565b9650506111bf846111ba86848601611036565b611036565b9150508093506110b7565b50506111dc8383848851850103610f43565b925050506040519150618000820180820391508183526020830160005b838110156112115782810151828201526020016111f9565b506000920191825250602001604052919050565b60008061123583620cc3946115ec565b61125f907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7632006117bc565b905061126f6064620f4240611830565b8112156105c957610aba6064620f4240611830565b80516000908190815b81811015611307578481815181106112a7576112a76118ec565b01602001517fff00000000000000000000000000000000000000000000000000000000000000166000036112e7576112e06004846115d4565b92506112f5565b6112f26010846115d4565b92505b806112ff8161191b565b91505061128d565b50610b95826104406115d4565b60008061132083611225565b9050600061132c610c90565b61133461064d565b63ffffffff1661134491906115ec565b61134c6105ec565b611354610966565b61135f906010611664565b63ffffffff1661136f91906115ec565b61137991906115d4565b9050611387600660026115ec565b61139290600a6117b0565b61139c82846115ec565b610b959190611629565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156113e757600080fd5b813567ffffffffffffffff808211156113ff57600080fd5b818401915084601f83011261141357600080fd5b813581811115611425576114256113a6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561146b5761146b6113a6565b8160405282815287602084870101111561148457600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208083528351808285015260005b818110156114d1578581018301518582016040015282016114b5565b818111156114e3576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561152957600080fd5b5035919050565b60006020828403121561154257600080fd5b5051919050565b60006020828403121561155b57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610aba57600080fd5b60006020828403121561159157600080fd5b815163ffffffff81168114610aba57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156115e7576115e76115a5565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611624576116246115a5565b500290565b60008261165f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600063ffffffff80831681851681830481118215151615611687576116876115a5565b02949350505050565b600181815b808511156116e957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156116cf576116cf6115a5565b808516156116dc57918102915b93841c9390800290611695565b509250929050565b600082611700575060016105c9565b8161170d575060006105c9565b8160018114611723576002811461172d57611749565b60019150506105c9565b60ff84111561173e5761173e6115a5565b50506001821b6105c9565b5060208310610133831016604e8410600b841016171561176c575081810a6105c9565b6117768383611690565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156117a8576117a86115a5565b029392505050565b6000610aba83836116f1565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156117f6576117f66115a5565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561182a5761182a6115a5565b50500190565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615611871576118716115a5565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156118ac576118ac6115a5565b600087129250878205871284841616156118c8576118c86115a5565b878505871281841616156118de576118de6115a5565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361194c5761194c6115a5565b506001019056fea164736f6c634300080f000a \ No newline at end of file