solc-0.8.35 0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640 optimized
24115 bytes
608060405234801561000f575f5ffd5b5060043610610187575f3560e01c806370cf754a116100d9578063c45a015511610093578063ddca3f431161006e578063ddca3f431461059f578063f3058399146105da578063f30dba93146105e3578063f637731d146106b6575f5ffd5b8063c45a015514610517578063d0c93a7c1461053e578063d21220a714610578575f5ffd5b806370cf754a146104555780638206a4d11461047c57806385b667291461048f578063883bdbfd146104a2578063a34123a7146104c3578063a38807f2146104d6575f5ffd5b80633850c7bd11610144578063490e6cbc1161011f578063490e6cbc146103905780634f1eb3d8146103a3578063514ea4bf146103b65780635339c29614610436575f5ffd5b80633850c7bd146102c25780633c8a7d8d146103665780634614131914610379575f5ffd5b80630dfe16811461018b578063128acb08146101cf5780631a686502146101f75780631ad8b03b14610222578063252c09d71461026057806332148f67146102ad575b5f5ffd5b6101b27f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6040516001600160a01b0390911681526020015b60405180910390f35b6101e26101dd366004615457565b6106c9565b604080519283526020830191909152016101c6565b60045461020a906001600160801b031681565b6040516001600160801b0390911681526020016101c6565b600354610240906001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016101c6565b61027361026e3660046154d7565b611262565b6040805163ffffffff909516855260069390930b60208501526001600160a01b0390911691830191909152151560608201526080016101c6565b6102c06102bb3660046154ee565b6112a6565b005b5f54610315906001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b604080516001600160a01b03909816885260029690960b602088015261ffff94851695870195909552918316606086015291909116608084015260ff1660a0830152151560c082015260e0016101c6565b6101e2610374366004615536565b61137f565b61038260025481565b6040519081526020016101c6565b6102c061039e366004615580565b6115bd565b6102406103b13660046155e5565b611a0f565b6104006103c43660046154d7565b60076020525f908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b604080516001600160801b039687168152602081019590955284019290925283166060830152909116608082015260a0016101c6565b610382610444366004615648565b60066020525f908152604090205481565b61020a7f0000000000000000000000000000000000005e8b2285f864419ac400be90719681565b6102c061048a366004615678565b611c55565b61024061049d3660046156a9565b611e1b565b6104b56104b03660046156eb565b612125565b6040516101c692919061575c565b6101e26104d13660046157e8565b6121ab565b6104e96104e4366004615811565b61232c565b6040805160069490940b84526001600160a01b03909216602084015263ffffffff16908201526060016101c6565b6101b27f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f98481565b6105657f000000000000000000000000000000000000000000000000000000000000000a81565b60405160029190910b81526020016101c6565b6101b27f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6105c67f00000000000000000000000000000000000000000000000000000000000001f481565b60405162ffffff90911681526020016101c6565b61038260015481565b61065a6105f1366004615839565b60056020525f908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b9290600681900b90600160381b81046001600160a01b031690600160d81b810463ffffffff1690600160f81b900460ff1688565b604080516001600160801b039099168952600f9790970b602089015295870194909452606086019290925260060b60808501526001600160a01b031660a084015263ffffffff1660c0830152151560e0820152610100016101c6565b6102c06106c4366004615852565b612562565b5f5f6106d361269a565b855f0361070c5760405162461bcd60e51b8152602060048201526002602482015261415360f01b60448201526064015b60405180910390fd5b6040805160e0810182525f546001600160a01b0381168252600160a01b810460020b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c082018190526107a35760405162461bcd60e51b81526004016107039061586d565b876107ed57805f01516001600160a01b0316866001600160a01b03161180156107e8575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038716105b61081e565b805f01516001600160a01b0316866001600160a01b031610801561081e57506401000276a36001600160a01b038716115b6108505760405162461bcd60e51b815260206004820152600360248201526214d41360ea1b6044820152606401610703565b5f805460ff60f01b191681556040805160c08101909152808a61087e5760048460a0015160ff16901c61088f565b60108460a0015161088f919061589e565b60ff1681526004546001600160801b031660208201526040014263ffffffff1681526020015f60060b81526020015f6001600160a01b031681526020015f151581525090505f5f891390505f6040518060e001604052808b81526020015f8152602001855f01516001600160a01b03168152602001856020015160020b81526020018c61091e57600254610922565b6001545b81526020015f6001600160801b0316815260200184602001516001600160801b031681525090505b8051158015906109705750886001600160a01b031681604001516001600160a01b031614155b15610dbd576040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915260408201516001600160a01b0316815260608201516109f0906006907f000000000000000000000000000000000000000000000000000000000000000a8f6126d0565b1515604083015260020b60208201819052620d89e7191315610a1b57620d89e7196020820152610a4f565b610a28620d89e7196158d3565b60020b816020015160020b1315610a4f57610a46620d89e7196158d3565b60020b60208201525b610a5c8160200151612885565b6001600160a01b031660608201526040820151610aed908d610a96578b6001600160a01b031683606001516001600160a01b031611610ab0565b8b6001600160a01b031683606001516001600160a01b0316105b610abe578260600151610ac0565b8b5b60c085015185517f00000000000000000000000000000000000000000000000000000000000001f4612c9d565b60c085015260a084015260808301526001600160a01b031660408301528215610b6557610b2c8160c001518260800151610b2791906158f3565b612eb2565b82518390610b3b908390615906565b90525060a0810151610b5b90610b5090612eb2565b602084015190612ec6565b6020830152610bb1565b610b728160a00151612eb2565b82518390610b8190839061592c565b90525060c08101516080820151610bab91610ba091610b2791906158f3565b602084015190612eea565b60208301525b835160ff1615610c0b575f845f015160ff168260c00151610bd29190615953565b9050808260c001818151610be69190615966565b90525060a083018051829190610bfd908390615979565b6001600160801b0316905250505b60c08201516001600160801b031615610c5357610c3e8160c00151600160801b8460c001516001600160801b0316612f08565b82608001818151610c4f91906158f3565b9052505b80606001516001600160a01b031682604001516001600160a01b031603610d8157806040015115610d54578360a00151610cd757610cb984604001515f8760200151886040015188602001518a606001516008613079909695949392919063ffffffff16565b6001600160a01b0316608086015260060b6060850152600160a08501525b5f610d2282602001518e610ced57600154610cf3565b84608001515b8f610d02578560800151610d06565b6002545b608089015160608a015160408b01516005959493929190613264565b90508c15610d3657610d3381615998565b90505b610d448360c0015182613376565b6001600160801b031660c0840152505b8b610d63578060200151610d74565b60018160200151610d7491906159bd565b60020b6060830152610db7565b805f01516001600160a01b031682604001516001600160a01b031614610db757610dae8260400151613435565b60020b60608301525b5061094a565b836020015160020b816060015160020b14610e85575f5f610e0a86604001518660400151886020015188602001518a606001518b60800151600861376a909695949392919063ffffffff16565b604085015160608601515f805463ffffffff60b81b1916600160c81b61ffff9586160261ffff60b81b191617600160b81b9590941694909402929092176001600160b81b031916600160a01b62ffffff909316929092026001600160a01b031916919091176001600160a01b0390911617905550610ea99050565b60408101515f80546001600160a01b0319166001600160a01b039092169190911790555b8060c001516001600160801b031683602001516001600160801b031614610eef5760c0810151600480546001600160801b0319166001600160801b039092169190911790555b8a15610f5957608081015160015560a08101516001600160801b031615610f545760a0810151600380545f90610f2f9084906001600160801b0316615979565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b610fc0565b608081015160025560a08101516001600160801b031615610fc05760a081015160038054601090610f9b908490600160801b90046001600160801b0316615979565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b8115158b151514610fe15760208101518151610fdc908c615906565b610ff3565b8051610fed908b615906565b81602001515b90965094508a156110e7575f851215611039576110397f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28d611034886159e2565b6138f1565b5f6110426139ec565b60405163fa461e3360e01b8152909150339063fa461e339061106e908a908a908e908e90600401615a24565b5f604051808303815f87803b158015611085575f5ffd5b505af1158015611097573d5f5f3e3d5ffd5b505050506110a36139ec565b6110ad8289613ae5565b11156110e15760405162461bcd60e51b815260206004820152600360248201526249494160e81b6044820152606401610703565b506111c7565b5f86121561111d5761111d7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb488d611034896159e2565b5f611126613afe565b60405163fa461e3360e01b8152909150339063fa461e3390611152908a908a908e908e90600401615a24565b5f604051808303815f87803b158015611169575f5ffd5b505af115801561117b573d5f5f3e3d5ffd5b50505050611187613afe565b6111918288613ae5565b11156111c55760405162461bcd60e51b815260206004820152600360248201526249494160e81b6044820152606401610703565b505b60408082015160c083015160608085015184518b8152602081018b90526001600160a01b03948516958101959095526001600160801b039092169084015260020b60808301528d169033907fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca679060a00160405180910390a350505f805460ff60f01b1916600160f01b17905550919890975095505050505050565b60088161ffff8110611272575f80fd5b015463ffffffff81169150600160201b810460060b90600160581b81046001600160a01b031690600160f81b900460ff1684565b5f54600160f01b900460ff166112ce5760405162461bcd60e51b81526004016107039061586d565b5f805460ff60f01b191690556112e261269a565b5f8054600160d81b900461ffff16906112fd60088385613b49565b5f805461ffff808416600160d81b810261ffff60d81b1990931692909217909255919250831614611368576040805161ffff8085168252831660208201527fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a91015b60405180910390a15b50505f805460ff60f01b1916600160f01b17905550565b5f80548190600160f01b900460ff166113aa5760405162461bcd60e51b81526004016107039061586d565b5f805460ff60f01b191690556001600160801b0385166113c8575f5ffd5b5f5f61141560405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b815260200161140b8a6001600160801b0316613bec565b600f0b9052613c01565b92509250508193508092505f5f5f861115611435576114326139ec565b91505b841561144657611443613afe565b90505b60405163d348799760e01b8152339063d34879979061146f90899089908d908d90600401615a24565b5f604051808303815f87803b158015611486575f5ffd5b505af1158015611498573d5f5f3e3d5ffd5b505050505f8611156114e9576114ac6139ec565b6114b68388613ae5565b11156114e95760405162461bcd60e51b815260206004820152600260248201526104d360f41b6044820152606401610703565b8415611534576114f7613afe565b6115018287613ae5565b11156115345760405162461bcd60e51b81526020600482015260026024820152614d3160f01b6044820152606401610703565b604080513381526001600160801b038b1660208201529081018790526060810186905260028b810b91908d900b906001600160a01b038f16907f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde9060800160405180910390a450505f805460ff60f01b1916600160f01b17905550919890975095505050505050565b5f54600160f01b900460ff166115e55760405162461bcd60e51b81526004016107039061586d565b5f805460ff60f01b191690556115f961269a565b6004546001600160801b0316806116365760405162461bcd60e51b81526020600482015260016024820152601360fa1b6044820152606401610703565b5f61166a867f00000000000000000000000000000000000000000000000000000000000001f462ffffff16620f4240613e31565b90505f6116a0867f00000000000000000000000000000000000000000000000000000000000001f462ffffff16620f4240613e31565b90505f6116ab6139ec565b90505f6116b6613afe565b905088156116e9576116e97f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb488b8b6138f1565b871561171a5761171a7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28b8a6138f1565b604051630e9cbafb60e41b8152339063e9cbafb09061174390879087908c908c90600401615a24565b5f604051808303815f87803b15801561175a575f5ffd5b505af115801561176c573d5f5f3e3d5ffd5b505050505f6117796139ec565b90505f611784613afe565b9050816117918588613ae5565b11156117c45760405162461bcd60e51b8152602060048201526002602482015261046360f41b6044820152606401610703565b806117cf8487613ae5565b11156118025760405162461bcd60e51b8152602060048201526002602482015261463160f01b6044820152606401610703565b5f61180d8584615966565b90505f61181a8584615966565b905081156118e7575f805461183b90601090600160e81b900460ff1661589e565b90505f60ff8216156118595761185460ff831685615953565b61185b565b5f5b90506001600160801b038116156118ae57600380548291905f906118899084906001600160801b0316615979565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b6118cf6118bb8286615966565b600160801b8d6001600160801b0316612f08565b60015f8282546118df91906158f3565b909155505050505b8015611998575f8054600160e81b900460041c600f169081156119165761191160ff831684615953565b611918565b5f5b90506001600160801b03811615611973576003805482919060109061194e908490600160801b90046001600160801b0316615979565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b6119806118bb8285615966565b60025f82825461199091906158f3565b909155505050505b604080518e8152602081018e9052908101839052606081018290526001600160a01b038f169033907fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6339060800160405180910390a350505f805460ff60f01b1916600160f01b179055505050505050505050505050565b5f80548190600160f01b900460ff16611a3a5760405162461bcd60e51b81526004016107039061586d565b5f805460ff60f01b19168155611a536007338989613e76565b60038101549091506001600160801b0390811690861611611a745784611a83565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b909104811690851611611aab5783611ac1565b6003810154600160801b90046001600160801b03165b91506001600160801b03831615611b49576003810180548491905f90611af19084906001600160801b0316615a4d565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550611b497f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4889856001600160801b03166138f1565b6001600160801b03821615611bd657818160030160108282829054906101000a90046001600160801b0316611b7e9190615a4d565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550611bd67f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc289846001600160801b03166138f1565b604080516001600160a01b038a1681526001600160801b0385811660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4505f805460ff60f01b1916600160f01b17905590969095509350505050565b5f54600160f01b900460ff16611c7d5760405162461bcd60e51b81526004016107039061586d565b5f805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9841691638da5cb5b9160048083019260209291908290030181865afa158015611cec573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d109190615a6c565b6001600160a01b0316336001600160a01b031614611d2c575f5ffd5b60ff82161580611d4f575060048260ff1610158015611d4f5750600a8260ff1611155b8015611d79575060ff81161580611d79575060048160ff1610158015611d795750600a8160ff1611155b611d81575f5ffd5b5f54600160e81b900460ff16611d9f600483901b610ff01684615a87565b5f805460ff92909216600160e81b0260ff60e81b199092169190911790557f973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b133611de960108361589e565b6040805160ff9283168152600f600486901c16602082015286831691810191909152908416606082015260800161135f565b5f80548190600160f01b900460ff16611e465760405162461bcd60e51b81526004016107039061586d565b5f805460ff60f01b1916905560408051638da5cb5b60e01b815290516001600160a01b037f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9841691638da5cb5b9160048083019260209291908290030181865afa158015611eb5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ed99190615a6c565b6001600160a01b0316336001600160a01b031614611ef5575f5ffd5b6003546001600160801b0390811690851611611f115783611f1e565b6003546001600160801b03165b6003549092506001600160801b03600160801b909104811690841611611f445782611f58565b600354600160801b90046001600160801b03165b90506001600160801b03821615612002576003546001600160801b0390811690831603611f8d5781611f8981615aa0565b9250505b600380548391905f90611faa9084906001600160801b0316615a4d565b92506101000a8154816001600160801b0302191690836001600160801b031602179055506120027f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4886846001600160801b03166138f1565b6001600160801b038116156120b9576003546001600160801b03600160801b90910481169082160361203c578061203881615aa0565b9150505b60038054829190601090612061908490600160801b90046001600160801b0316615a4d565b92506101000a8154816001600160801b0302191690836001600160801b031602179055506120b97f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc286836001600160801b03166138f1565b604080516001600160801b038085168252831660208201526001600160a01b0387169133917f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151910160405180910390a35f805460ff60f01b1916600160f01b1790559094909350915050565b60608061213061269a565b61219f428585808060200260200160405190810160405280939291908181526020018383602002808284375f92018290525054600454600896959450600160a01b820460020b935061ffff600160b81b8304811693506001600160801b0390911691600160c81b900416613ed2565b915091505b9250929050565b5f80548190600160f01b900460ff166121d65760405162461bcd60e51b81526004016107039061586d565b5f805460ff60f01b1916815560408051608081018252338152600288810b602083015287900b918101919091528190819061222a90606081016122216001600160801b038a16613bec565b61140b90615998565b9250925092508161223a906159e2565b9450612245816159e2565b93505f85118061225457505f84115b156122b65760038301546122729086906001600160801b0316615979565b6003840154612292908690600160801b90046001600160801b0316615979565b6001600160801b039182169116600160801b026001600160801b0319161760038401555b604080516001600160801b038816815260208101879052908101859052600288810b91908a900b9033907f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c9060600160405180910390a450505f805460ff60f01b1916600160f01b179055509094909350915050565b5f5f5f61233761269a565b612341858561402e565b600285810b5f908152600560205260408082209287900b825281206003830154600681900b93600160381b82046001600160a01b0316928492600160d81b810463ffffffff169284929091600160f81b900460ff168061239f575f5ffd5b6003820154600681900b9850600160381b81046001600160a01b03169650600160d81b810463ffffffff169450600160f81b900460ff16806123df575f5ffd5b50506040805160e0810182525f546001600160a01b0381168252600160a01b8104600290810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b8304909416608084015260ff600160e81b8304811660a0850152600160f01b909204909116151560c08301529093508e900b1315905061249c576124768688615ac1565b6124808587615aee565b61248a8486615b0d565b9950995099505050505050505061255b565b8a60020b816020015160020b121561253d5760208101516040820151600454606084015142935f9384936124e49360089388938793919290916001600160801b031690613079565b9092509050886124f48b84615ac1565b6124fe9190615ac1565b876125098a84615aee565b6125139190615aee565b8661251e8987615b0d565b6125289190615b0d565b9c509c509c505050505050505050505061255b565b6125478787615ac1565b6125518686615aee565b61248a8585615b0d565b9250925092565b5f546001600160a01b03161561259f5760405162461bcd60e51b8152602060048201526002602482015261414960f01b6044820152606401610703565b5f6125a982613435565b604080516080808201835263ffffffff42168083525f602080850182905284860182905260016060958601819052600160f81b909317600855855160e0810187526001600160a01b038a16808252600289900b82840181905282890185905296820185905294810184905260a0810183905260c00183905281546001600160b81b0319168417600160a01b62ffffff8916021767ffffffffffffffff60b81b19166501000001000160c81b1790915584519283528201929092528251939450909283927f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c95928290030190a150505050565b306001600160a01b037f00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f564016146126ce575f5ffd5b565b5f80806126dd8587615b29565b90505f8660020b1280156126fc57506126f68587615b61565b60020b15155b1561270f578061270b81615b82565b9150505b83156127b9575f5f612720836140f3565b90925090505f600160ff831681901b9061273a9082615966565b61274491906158f3565b600184900b5f90815260208c905260409020548116801515965090915085612783578861277460ff8516876159bd565b61277e9190615b9a565b6127ae565b8861278d8261410f565b6127979085615bb9565b6127a49060ff16876159bd565b6127ae9190615b9a565b96505050505061287b565b5f806127ce6127c9846001615bd2565b6140f3565b90925090505f6127e5600160ff841681901b615966565b600184900b5f90815260208c90526040902054901990811680151596509091508561283d57886128168460ff615bb9565b60ff16612824876001615bd2565b61282e9190615bd2565b6128389190615b9a565b612874565b8883612848836141fc565b6128529190615bb9565b60ff16612860876001615bd2565b61286a9190615bd2565b6128749190615b9a565b9650505050505b5094509492505050565b5f5f5f8360020b1261289a578260020b6128a7565b8260020b6128a7906159e2565b90506128b6620d89e7196158d3565b60020b8111156128ec5760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610703565b5f816001165f0361290157600160801b612913565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561295257608061294d826ffff97272373d413259a46990580e213a615bf7565b901c90505b600482161561297c576080612977826ffff2e50f5f656932ef12357cf3c7fdcc615bf7565b901c90505b60088216156129a65760806129a1826fffe5caca7e10e4e61c3624eaa0941cd0615bf7565b901c90505b60108216156129d05760806129cb826fffcb9843d60f6159c9db58835c926644615bf7565b901c90505b60208216156129fa5760806129f5826fff973b41fa98c081472e6896dfb254c0615bf7565b901c90505b6040821615612a24576080612a1f826fff2ea16466c96a3843ec78b326b52861615bf7565b901c90505b6080821615612a4e576080612a49826ffe5dee046a99a2a811c461f1969c3053615bf7565b901c90505b610100821615612a79576080612a74826ffcbe86c7900a88aedcffc83b479aa3a4615bf7565b901c90505b610200821615612aa4576080612a9f826ff987a7253ac413176f2b074cf7815e54615bf7565b901c90505b610400821615612acf576080612aca826ff3392b0822b70005940c7a398e4b70f3615bf7565b901c90505b610800821615612afa576080612af5826fe7159475a2c29b7443b29c7fa6e889d9615bf7565b901c90505b611000821615612b25576080612b20826fd097f3bdfd2022b8845ad8f792aa5825615bf7565b901c90505b612000821615612b50576080612b4b826fa9f746462d870fdf8a65dc1f90e061e5615bf7565b901c90505b614000821615612b7b576080612b76826f70d869a156d2a1b890bb3df62baf32f7615bf7565b901c90505b618000821615612ba6576080612ba1826f31be135f97d08fd981231505542fcfa6615bf7565b901c90505b62010000821615612bd2576080612bcd826f09aa508b5b7a84e1c677de54f3e99bc9615bf7565b901c90505b62020000821615612bfd576080612bf8826e5d6af8dedb81196699c329225ee604615bf7565b901c90505b62040000821615612c27576080612c22826d2216e584f5fa1ea926041bedfe98615bf7565b901c90505b62080000821615612c4f576080612c4a826b048a170391f7dc42444e8fa2615bf7565b901c90505b5f8460020b1315612c6857612c65815f19615953565b90505b612c76600160201b82615c0e565b15612c82576001612c84565b5f5b612c959060ff16602083901c6158f3565b949350505050565b5f8080806001600160a01b03808916908a161015818712801590612d27575f612cdb89612ccd8a620f4240615c21565b62ffffff16620f4240612f08565b905082612cf457612cef8c8c8c6001614325565b612d01565b612d018b8d8c60016143a2565b9550858110612d12578a9650612d21565b612d1e8c8b8386614465565b96505b50612d79565b81612d3d57612d388b8b8b5f6143a2565b612d49565b612d498a8c8b5f614325565b935083612d55896159e2565b10612d6257899550612d79565b612d768b8a612d708b6159e2565b856144ad565b95505b6001600160a01b038a8116908716148215612ddb57808015612d985750815b612dae57612da9878d8c60016143a2565b612db0565b855b9550808015612dbd575081155b612dd257612dcd878d8c5f614325565b612dd4565b845b9450612e24565b808015612de55750815b612dfb57612df68c888c6001614325565b612dfd565b855b9550808015612e0a575081155b612e1f57612e1a8c888c5f6143a2565b612e21565b845b94505b81158015612e395750612e36896159e2565b85115b15612e4a57612e47896159e2565b94505b818015612e6957508a6001600160a01b0316876001600160a01b031614155b15612e7f57612e78868a615966565b9350612ea3565b612ea08662ffffff8a16612e968b620f4240615c21565b62ffffff16613e31565b93505b50505095509550955095915050565b5f600160ff1b8210612ec2575f5ffd5b5090565b5f8082121583612ed68482615906565b925082131514612ee4575f5ffd5b92915050565b5f8082121583612efa848261592c565b925082121514612ee4575f5ffd5b5f80805f19858709858702925082811083820303915050805f03612f3c575f8411612f31575f5ffd5b508290049050613072565b808411612f47575f5ffd5b5f848688098084039381119092039190505f85612f66811960016158f3565b16958690049593849004935f819003046001019050612f858184615bf7565b909317925f612f95876003615bf7565b6002189050612fa48188615bf7565b612faf906002615966565b612fb99082615bf7565b9050612fc58188615bf7565b612fd0906002615966565b612fda9082615bf7565b9050612fe68188615bf7565b612ff1906002615966565b612ffb9082615bf7565b90506130078188615bf7565b613012906002615966565b61301c9082615bf7565b90506130288188615bf7565b613033906002615966565b61303d9082615bf7565b90506130498188615bf7565b613054906002615966565b61305e9082615bf7565b905061306a8186615bf7565b955050505050505b9392505050565b5f5f8663ffffffff165f0361311f575f898661ffff1661ffff81106130a0576130a0615c3c565b60408051608081018252919092015463ffffffff808216808452600160201b830460060b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a161461310b57613108818a89886144f3565b90505b806020015181604001519250925050613258565b5f61312a888a615b0d565b90505f5f61313d8c8c858c8c8c8c6145ce565b91509150815f015163ffffffff168363ffffffff160361316d578160200151826040015194509450505050613258565b805f015163ffffffff168363ffffffff1603613199578060200151816040015194509450505050613258565b815181515f916131a891615b0d565b83519091505f906131b99086615b0d565b90508063ffffffff168263ffffffff16856020015185602001516131dd9190615ac1565b6131e79190615c50565b6131f19190615c83565b84602001516132009190615ca2565b8263ffffffff168263ffffffff16866040015186604001516132229190615aee565b6001600160a01b03166132359190615bf7565b61323f9190615953565b856040015161324e9190615ccf565b9650965050505050505b97509795505050505050565b600286900b5f90815260208890526040812060018101546132859088615966565b600182015560028101546132999087615966565b600282015560038101546132bd90600160381b90046001600160a01b031686615aee565b6003820180546001600160a01b0392909216600160381b02670100000000000000600160d81b031990921691909117908190556132fd9060060b85615ac1565b60038201805466ffffffffffffff191666ffffffffffffff92909216919091179081905561333890600160d81b900463ffffffff1684615b0d565b60038201805463ffffffff92909216600160d81b0263ffffffff60d81b1990921691909117905554600160801b9004600f0b98975050505050505050565b5f5f82600f0b12156133e2576001600160801b03831661339583615998565b61339f9085615a4d565b9150816001600160801b0316106133dd5760405162461bcd60e51b81526020600482015260026024820152614c5360f01b6044820152606401610703565b612ee4565b6001600160801b0383166133f68385615979565b9150816001600160801b03161015612ee45760405162461bcd60e51b81526020600482015260026024820152614c4160f01b6044820152606401610703565b5f6401000276a36001600160a01b03831610801590613470575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b6134a05760405162461bcd60e51b81526020600482015260016024820152602960f91b6044820152606401610703565b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c9790881196179094179092171790911717176080811061353b57613531607f82615966565b83901c915061354c565b61354681607f615966565b83901b91505b5f604061355a608084615906565b901b9050828302607f1c92508260801c80603f1b8217915083811c935050828302607f1c92508260801c80603e1b8217915083811c935050828302607f1c92508260801c80603d1b8217915083811c935050828302607f1c92508260801c80603c1b8217915083811c935050828302607f1c92508260801c80603b1b8217915083811c935050828302607f1c92508260801c80603a1b8217915083811c935050828302607f1c92508260801c8060391b8217915083811c935050828302607f1c92508260801c8060381b8217915083811c935050828302607f1c92508260801c8060371b8217915083811c935050828302607f1c92508260801c8060361b8217915083811c935050828302607f1c92508260801c8060351b8217915083811c935050828302607f1c92508260801c8060341b8217915083811c935050828302607f1c92508260801c8060331b8217915083811c935050828302607f1c92508260801c8060321b82179150505f81693627a301d71055774c856136dc9190615cee565b90505f60806136fb6f028f6481ab7f045a5af012a19d003aaa84615906565b901d90505f608061371c846fdb2df09e81959a81455e260799a0632f61592c565b901d90508060020b8260020b1461375b57886001600160a01b031661374082612885565b6001600160a01b03161115613755578161375d565b8061375d565b815b9998505050505050505050565b5f5f5f898961ffff1661ffff811061378457613784615c3c565b60408051608081018252919092015463ffffffff808216808452600160201b830460060b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff1615156060830152909250891690036137ed5788859250925050613258565b8461ffff168461ffff16118015613815575061380a600186615d1d565b61ffff168961ffff16145b1561382257839150613826565b8491505b816138328a6001615d37565b61383c9190615d51565b925061384a818989896144f3565b8a8461ffff1661ffff811061386157613861615c3c565b825191018054602084015160408501516060909501511515600160f81b026001600160f81b036001600160a01b03909616600160581b02959095166affffffffffffffffffffff66ffffffffffffff909216600160201b026affffffffffffffffffffff1990931663ffffffff909516949094179190911716919091179190911790555097509795505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f9283929087169161394c9190615d74565b5f604051808303815f865af19150503d805f8114613985576040519150601f19603f3d011682016040523d82523d5f602084013e61398a565b606091505b50915091508180156139b45750805115806139b45750808060200190518101906139b49190615d8a565b6139e55760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610703565b5050505050565b6040513060248201525f90819081906001600160a01b037f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4816906370a0823160e01b906044015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051613a719190615d74565b5f60405180830381855afa9150503d805f8114613aa9576040519150601f19603f3d011682016040523d82523d5f602084013e613aae565b606091505b5091509150818015613ac257506020815110155b613aca575f5ffd5b80806020019051810190613ade9190615da5565b9250505090565b5f82613af183826158f3565b9150811015612ee4575f5ffd5b6040513060248201525f90819081906001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216906370a0823160e01b90604401613a33565b5f5f8361ffff1611613b815760405162461bcd60e51b81526020600482015260016024820152604960f81b6044820152606401610703565b8261ffff168261ffff1611613b97575081613072565b825b8261ffff168161ffff161015613be3576001858261ffff1661ffff8110613bc257613bc2615c3c565b01805463ffffffff191663ffffffff92909216919091179055600101613b99565b50909392505050565b80600f81900b8114613bfc575f5ffd5b919050565b5f5f5f613c0c61269a565b613c1e8460200151856040015161402e565b6040805160e0810182525f546001600160a01b0381168252600160a01b810460020b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b8504909116608086015260ff600160e81b8504811660a0870152600160f01b909404909316151560c085015288519089015194890151928901519394613cbb94919390929091906147e7565b93508460600151600f0b5f14613e2957846020015160020b816020015160020b1215613d0f57613d08613cf18660200151612885565b613cfe8760400151612885565b87606001516149c4565b9250613e29565b846040015160020b816020015160020b1215613dff5760045460408201516001600160801b0390911690613d5a9042602085015160608601516080870151600894939291879161376a565b5f805463ffffffff60b81b1916600160c81b61ffff9384160261ffff60b81b191617600160b81b939092169290920217905581516040870151613dab9190613da190612885565b88606001516149c4565b9350613dc9613dbd8760200151612885565b83516060890151614a04565b9250613dd9818760600151613376565b600480546001600160801b0319166001600160801b039290921691909117905550613e29565b613e26613e0f8660200151612885565b613e1c8760400151612885565b8760600151614a04565b91505b509193909250565b5f613e3d848484612f08565b90505f8280613e4e57613e4e61588a565b8486091115613072575f198110613e63575f5ffd5b80613e6d81615dbc565b95945050505050565b6040805160609490941b6bffffffffffffffffffffffff191660208086019190915260e893841b60348601529190921b60378401528151601a818503018152603a90930182528251928101929092205f90815292909152902090565b6060805f8361ffff1611613f0c5760405162461bcd60e51b81526020600482015260016024820152604960f81b6044820152606401610703565b865167ffffffffffffffff811115613f2657613f26615dd4565b604051908082528060200260200182016040528015613f4f578160200160208202803683370190505b509150865167ffffffffffffffff811115613f6c57613f6c615dd4565b604051908082528060200260200182016040528015613f95578160200160208202803683370190505b5090505f5b875181101561402157613fcb8a8a8a8481518110613fba57613fba615c3c565b60200260200101518a8a8a8a613079565b848381518110613fdd57613fdd615c3c565b60200260200101848481518110613ff657613ff6615c3c565b6001600160a01b039093166020938402919091019092019190915260069190910b9052600101613f9a565b5097509795505050505050565b8060020b8260020b126140695760405162461bcd60e51b8152602060048201526003602482015262544c5560e81b6044820152606401610703565b620d89e719600283900b12156140a75760405162461bcd60e51b8152602060048201526003602482015262544c4d60e81b6044820152606401610703565b6140b4620d89e7196158d3565b60020b8160020b13156140ef5760405162461bcd60e51b815260206004820152600360248201526254554d60e81b6044820152606401610703565b5050565b600281900b60081d5f61410861010084615b61565b9050915091565b5f5f821161411b575f5ffd5b600160801b821061413957608091821c916141369082615a87565b90505b68010000000000000000821061415c57604091821c916141599082615a87565b90505b600160201b821061417a57602091821c916141779082615a87565b90505b62010000821061419757601091821c916141949082615a87565b90505b61010082106141b357600891821c916141b09082615a87565b90505b601082106141ce57600491821c916141cb9082615a87565b90505b600482106141e957600291821c916141e69082615a87565b90505b60028210613bfc57612ee4600182615a87565b5f5f8211614208575f5ffd5b5060ff6001600160801b0382161561422c57614225608082615bb9565b9050614234565b608082901c91505b67ffffffffffffffff8216156142565761424f604082615bb9565b905061425e565b604082901c91505b63ffffffff82161561427c57614275602082615bb9565b9050614284565b602082901c91505b61ffff8216156142a057614299601082615bb9565b90506142a8565b601082901c91505b60ff8216156142c3576142bc600882615bb9565b90506142cb565b600882901c91505b600f8216156142e6576142df600482615bb9565b90506142ee565b600482901c91505b600382161561430957614302600282615bb9565b9050614311565b600282901c91505b6001821615613bfc57612ee4600182615bb9565b5f836001600160a01b0316856001600160a01b03161115614344579293925b81614378576143736001600160801b0384166143608787615aee565b6001600160a01b0316600160601b612f08565b613e6d565b613e6d6001600160801b03841661438f8787615aee565b6001600160a01b0316600160601b613e31565b5f836001600160a01b0316856001600160a01b031611156143c1579293925b600160601b600160e01b03606084901b165f6143dd8787615aee565b6001600160a01b031690505f876001600160a01b0316116143fc575f5ffd5b8361442e57866001600160a01b031661441f8383896001600160a01b0316612f08565b6144299190615953565b61445a565b61445a6144458383896001600160a01b0316613e31565b886001600160a01b0316808204910615150190565b979650505050505050565b5f5f856001600160a01b03161161447a575f5ffd5b5f846001600160801b03161161448e575f5ffd5b816144a0576143738585856001614a36565b613e6d8585856001614b19565b5f5f856001600160a01b0316116144c2575f5ffd5b5f846001600160801b0316116144d6575f5ffd5b816144e7576143738585855f614b19565b613e6d8585855f614a36565b604080516080810182525f80825260208201819052918101829052606081019190915284515f906145249086615b0d565b905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b6145529190615c83565b88602001516145619190615ca2565b60060b81526020015f856001600160801b031611614580576001614582565b845b6145a2906001600160801b031663ffffffff60801b608086901b16615de8565b88604001516145b19190615ccf565b6001600160a01b0316815260016020909101529695505050505050565b604080516080810182525f808252602082018190529181018290526060810191909152604080516080810182525f808252602082018190529181018290526060810191909152888561ffff1661ffff811061462b5761462b615c3c565b60408051608081018252919092015463ffffffff8116808352600160201b820460060b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff1615156060820152925061468990899089614c29565b156146b557815163ffffffff88811691161461325857816146ac838989886144f3565b91509150613258565b88836146c2876001615d37565b6146cc9190615d51565b61ffff1661ffff81106146e1576146e1615c3c565b60408051608081018252929091015463ffffffff81168352600160201b810460060b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820181905290925061478a57604080516080810182528a5463ffffffff81168252600160201b810460060b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b61479888835f015189614c29565b6147ca5760405162461bcd60e51b815260206004820152600360248201526213d31160ea1b6044820152606401610703565b6147d78989898887614cf5565b9150915097509795505050505050565b5f6147f56007878787613e76565b600154600254919250905f80600f87900b1561492a575f805460045442929182916148509160089186918591600160a01b820460020b9161ffff600160b81b82048116926001600160801b031691600160c81b900416613079565b909250905061488960058d8b8d8b8b87898b5f7f0000000000000000000000000000000000005e8b2285f864419ac400be907196614f06565b94506148c060058c8b8d8b8b87898b60017f0000000000000000000000000000000000005e8b2285f864419ac400be907196614f06565b935084156148f4576148f460068d7f000000000000000000000000000000000000000000000000000000000000000a6150ba565b83156149265761492660068c7f000000000000000000000000000000000000000000000000000000000000000a6150ba565b5050505b5f8061493b60058c8c8b8a8a61510a565b909250905061494c878a84846151f2565b5f89600f0b12156149b55783156149865760028b810b5f908152600560205260408120818155600181018290559182018190556003909101555b82156149b55760028a810b5f908152600560205260408120818155600181018290559182018190556003909101555b50505050505095945050505050565b5f5f82600f0b126149e4576149df610b2785858560016143a2565b612c95565b6149fb610b2785856149f586615998565b5f6143a2565b612c95906159e2565b5f5f82600f0b12614a1f576149df610b278585856001614325565b6149fb610b278585614a3086615998565b5f614325565b5f8115614aa6575f6001600160a01b03841115614a6a57614a6584600160601b876001600160801b0316612f08565b614a81565b614a816001600160801b038616606086901b615953565b9050614a9e614a996001600160a01b03881683613ae5565b6153e0565b915050612c95565b5f6001600160a01b03841115614ad357614ace84600160601b876001600160801b0316613e31565b614af0565b614af0606085901b6001600160801b038716808204910615150190565b905080866001600160a01b031611614b06575f5ffd5b614a9e816001600160a01b038816615966565b5f825f03614b28575083612c95565b600160601b600160e01b03606085901b168215614bcf575f6001600160a01b03871685614b558282615bf7565b9250614b619083615953565b03614b9a575f614b7182846158f3565b9050828110614b9857614b8e83896001600160a01b031683613e31565b9350505050612c95565b505b614bc682614bbb87614bb56001600160a01b038c1684615953565b90613ae5565b808204910615150190565b92505050612c95565b5f6001600160a01b03871685614be58282615bf7565b9250614bf19083615953565b148015614bfd57508082115b614c05575f5ffd5b5f614c108284615966565b9050614b8e614a99848a6001600160a01b031684613e31565b5f8363ffffffff168363ffffffff1611158015614c5257508363ffffffff168263ffffffff1611155b15614c6e578163ffffffff168363ffffffff1611159050613072565b5f8463ffffffff168463ffffffff1611614c9b57614c9663ffffffff8516600160201b615e16565b614ca3565b8363ffffffff165b64ffffffffff1690505f8563ffffffff168463ffffffff1611614cd957614cd463ffffffff8516600160201b615e16565b614ce1565b8363ffffffff165b64ffffffffff169091111595945050505050565b604080516080810182525f808252602082018190529181018290526060810191909152604080516080810182525f8082526020820181905291810182905260608101919091525f83614d48866001615d37565b614d529190615d51565b61ffff1690505f60018561ffff1683614d6b91906158f3565b614d759190615966565b90505f5b6002614d8583856158f3565b614d8f9190615953565b905089614da061ffff881683615c0e565b61ffff8110614db157614db1615c3c565b60408051608081018252929091015463ffffffff81168352600160201b810460060b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909550614e1c57614e158160016158f3565b9250614d79565b8961ffff8716614e2d8360016158f3565b614e379190615c0e565b61ffff8110614e4857614e48615c3c565b60408051608081018252929091015463ffffffff81168352600160201b810460060b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b909104161515606082015285519094505f90614eab908b908b614c29565b9050808015614ec35750614ec38a8a875f0151614c29565b15614ece5750614ef9565b80614ee557614ede600183615966565b9250614ef3565b614ef08260016158f3565b93505b50614d79565b5050509550959350505050565b60028a900b5f90815260208c90526040812080546001600160801b031682614f2e828d613376565b9050846001600160801b0316816001600160801b03161115614f775760405162461bcd60e51b81526020600482015260026024820152614c4f60f01b6044820152606401610703565b6001600160801b03818116159083168015919091141594505f03615029578c60020b8e60020b1361501157600183018b9055600283018a905560038301805466ffffffffffffff8a166001600160f81b0319909116600160381b6001600160a01b038d16027fff00000000ffffffffffffffffffffffffffffffffffffffff00000000000000161717600160d81b63ffffffff8a16021790555b6003830180546001600160f81b0316600160f81b1790555b82546001600160801b0319166001600160801b0382161783558561507057825461506b9061506690600160801b9004600f90810b908f900b612eea565b613bec565b61508f565b825461508f9061506690600160801b9004600f90810b908f900b612ec6565b83546001600160801b03918216600160801b0291161790925550909c9b505050505050505050505050565b6150c48183615b61565b60020b156150d0575f5ffd5b5f806150df6127c98486615b29565b600191820b5f9081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b5f8181526020899052604080822088850b83529082209193849391929184918291908a900b1261514a5750506001820154600283015461516e565b60018401546151599089615966565b915083600201548761516b9190615966565b90505b5f5f8b60020b8b60020b121561518f575050600183015460028401546151b3565b600185015461519e908b615966565b91508460020154896151b09190615966565b90505b816151be858c615966565b6151c89190615966565b9750806151d5848b615966565b6151df9190615966565b9650505050505050965096945050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201525f600f85900b810361528d5781516001600160801b03166152855760405162461bcd60e51b815260206004820152600260248201526104e560f41b6044820152606401610703565b50805161529c565b81516152999086613376565b90505b5f6152c58360200151866152b09190615966565b84516001600160801b0316600160801b612f08565b90505f6152f08460400151866152db9190615966565b85516001600160801b0316600160801b612f08565b905086600f0b5f146153165787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b03821615158061534357505f816001600160801b0316115b156153d6576003880180548391905f906153679084906001600160801b0316615979565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550808860030160108282829054906101000a90046001600160801b03166153b19190615979565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b5050505050505050565b806001600160a01b0381168114613bfc575f5ffd5b6001600160a01b0381168114615409575f5ffd5b50565b8015158114615409575f5ffd5b5f5f83601f840112615429575f5ffd5b50813567ffffffffffffffff811115615440575f5ffd5b6020830191508360208285010111156121a4575f5ffd5b5f5f5f5f5f5f60a0878903121561546c575f5ffd5b8635615477816153f5565b955060208701356154878161540c565b945060408701359350606087013561549e816153f5565b9250608087013567ffffffffffffffff8111156154b9575f5ffd5b6154c589828a01615419565b979a9699509497509295939492505050565b5f602082840312156154e7575f5ffd5b5035919050565b5f602082840312156154fe575f5ffd5b813561ffff81168114613072575f5ffd5b8035600281900b8114613bfc575f5ffd5b80356001600160801b0381168114613bfc575f5ffd5b5f5f5f5f5f5f60a0878903121561554b575f5ffd5b8635615556816153f5565b95506155646020880161550f565b94506155726040880161550f565b935061549e60608801615520565b5f5f5f5f5f60808688031215615594575f5ffd5b853561559f816153f5565b94506020860135935060408601359250606086013567ffffffffffffffff8111156155c8575f5ffd5b6155d488828901615419565b969995985093965092949392505050565b5f5f5f5f5f60a086880312156155f9575f5ffd5b8535615604816153f5565b94506156126020870161550f565b93506156206040870161550f565b925061562e60608701615520565b915061563c60808701615520565b90509295509295909350565b5f60208284031215615658575f5ffd5b81358060010b8114613072575f5ffd5b803560ff81168114613bfc575f5ffd5b5f5f60408385031215615689575f5ffd5b61569283615668565b91506156a060208401615668565b90509250929050565b5f5f5f606084860312156156bb575f5ffd5b83356156c6816153f5565b92506156d460208501615520565b91506156e260408501615520565b90509250925092565b5f5f602083850312156156fc575f5ffd5b823567ffffffffffffffff811115615712575f5ffd5b8301601f81018513615722575f5ffd5b803567ffffffffffffffff811115615738575f5ffd5b8560208260051b840101111561574c575f5ffd5b6020919091019590945092505050565b604080825283519082018190525f9060208501906060840190835b8181101561579857835160060b835260209384019390920191600101615777565b5050838103602080860191909152855180835291810192508501905f5b818110156157dc5782516001600160a01b03168452602093840193909201916001016157b5565b50919695505050505050565b5f5f5f606084860312156157fa575f5ffd5b6158038461550f565b92506156d46020850161550f565b5f5f60408385031215615822575f5ffd5b61582b8361550f565b91506156a06020840161550f565b5f60208284031215615849575f5ffd5b6130728261550f565b5f60208284031215615862575f5ffd5b8135613072816153f5565b6020808252600390820152624c4f4b60e81b604082015260600190565b634e487b7160e01b5f52601260045260245ffd5b5f60ff8316806158b0576158b061588a565b8060ff84160691505092915050565b634e487b7160e01b5f52601160045260245ffd5b5f8160020b627fffff1981036158eb576158eb6158bf565b5f0392915050565b80820180821115612ee457612ee46158bf565b8181035f831280158383131683831282161715615925576159256158bf565b5092915050565b8082018281125f83128015821682158216171561594b5761594b6158bf565b505092915050565b5f826159615761596161588a565b500490565b81810381811115612ee457612ee46158bf565b6001600160801b038181168382160190811115612ee457612ee46158bf565b5f81600f0b6f7fffffffffffffffffffffffffffffff1981036158eb576158eb6158bf565b600282810b9082900b03627fffff198112627fffff82131715612ee457612ee46158bf565b5f600160ff1b82016159f6576159f66158bf565b505f0390565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b848152836020820152606060408201525f615a436060830184866159fc565b9695505050505050565b6001600160801b038281168282160390811115612ee457612ee46158bf565b5f60208284031215615a7c575f5ffd5b8151613072816153f5565b60ff8181168382160190811115612ee457612ee46158bf565b5f6001600160801b03821680615ab857615ab86158bf565b5f190192915050565b600682810b9082900b03667fffffffffffff198112667fffffffffffff82131715612ee457612ee46158bf565b6001600160a01b038281168282160390811115612ee457612ee46158bf565b63ffffffff8281168282160390811115612ee457612ee46158bf565b5f8160020b8360020b80615b3f57615b3f61588a565b627fffff1982145f1982141615615b5857615b586158bf565b90059392505050565b5f8260020b80615b7357615b7361588a565b808360020b0791505092915050565b5f8160020b627fffff198103615ab857615ab86158bf565b5f8260020b8260020b028060020b9150808214615925576159256158bf565b60ff8281168282160390811115612ee457612ee46158bf565b600281810b9083900b01627fffff8113627fffff1982121715612ee457612ee46158bf565b8082028115828204841417612ee457612ee46158bf565b5f82615c1c57615c1c61588a565b500690565b62ffffff8281168282160390811115612ee457612ee46158bf565b634e487b7160e01b5f52603260045260245ffd5b5f8160060b8360060b80615c6657615c6661588a565b667fffffffffffff1982145f1982141615615b5857615b586158bf565b5f8260060b8260060b028060060b9150808214615925576159256158bf565b600681810b9083900b01667fffffffffffff8113667fffffffffffff1982121715612ee457612ee46158bf565b6001600160a01b038181168382160190811115612ee457612ee46158bf565b8082025f8212600160ff1b84141615615d0957615d096158bf565b8181058314821517612ee457612ee46158bf565b61ffff8281168282160390811115612ee457612ee46158bf565b61ffff8181168382160190811115612ee457612ee46158bf565b5f61ffff831680615d6457615d6461588a565b8061ffff84160691505092915050565b5f82518060208501845e5f920191825250919050565b5f60208284031215615d9a575f5ffd5b81516130728161540c565b5f60208284031215615db5575f5ffd5b5051919050565b5f60018201615dcd57615dcd6158bf565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b5f6001600160a01b03831680615e0057615e0061588a565b6001600160a01b03929092169190910492915050565b64ffffffffff8181168382160190811115612ee457612ee46158bf56