diff --git a/CHANGELOG.md b/CHANGELOG.md index 77645bc2..24a2e5ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,74 @@ ## V4 (rain.vats 0.1.6) +### StoxReceiptVault + +- **Fix (audit H01): keep OZ's `_totalSupply` in step with rebased balances.** + `migrateAccount` rewrites `_balances` directly via `LibERC20Storage`, so + before this change OZ's own `_totalSupply` accumulator was never adjusted for + a stock split and drifted below the true balance sum. OZ subtracts from that + accumulator **unchecked** on burn and adds to it **checked** on mint, so the + first burn exceeding the stale value wrapped the slot to ~`2**256` and every + subsequent mint reverted with `Panic(0x11)` — permanently capping issuance, + with no external symptom because `totalSupply()`, `balanceOf()` and all events + stayed mutually consistent. The slot has no write path other than mint/burn, + so recovery would have required a beacon implementation upgrade. + `migrateAccount` now applies the balance delta to the raw slot as well, via + the new `LibERC20Storage.applyBalanceDeltaToTotalSupply`. Reported supply is + unchanged: `totalSupply()` remains `LibTotalSupply.effectiveTotalSupply()` and + the per-cursor pot accounting is untouched. Reported by Protofire as H01 in + the `st0x.deploy 5.0` report (July 2026, audited at `ed767bf2`). + +- **`optimizer_runs` lowered 5000 → 2000 to fit the H01 fix under EIP-170.** + `StoxReceiptVault` had only a 6-byte runtime margin (24,570 of 24,576) at 5000 + runs, and the smallest correct form of the H01 fix costs ~148 bytes. Measured + with the fix applied: `runs=5000` → 24,718 (over by 142); `runs=3000` → + 24,456; `runs=2000` → 24,037 (**539 spare**); `runs=1000` → 22,936. Two + in-vault alternatives were measured and rejected: hoisting the supply sync to + a single call site in `_update` costs _more_ than the duplicated inline + (24,809), and `unchecked` arithmetic recovers only 18 bytes (24,700). + + This changes the compiled bytecode — and therefore the deterministic Zoltu + address — of **every** contract, not just the vault. Consequences: + + - No user-facing address moves. Every per-token contract is a `BeaconProxy`, + so token addresses, beacon addresses and roles are all unaffected. + - ⚠️ **This is a coordinated multi-contract release, not a single vault + upgrade.** Three singletons must be deployed and pointed at in lockstep: + - `StoxReceiptVault` — the H01 fix itself; requires the vault beacon to be + repointed. + - `StoxCorporateActionsFacet` — the vault bakes + `LibProdDeployCurrent.STOX_CORPORATE_ACTIONS_FACET` into its `fallback()`. + That address moved, so a vault built from this source delegatecalls into + empty code until the facet is deployed at its new address. This coupling + was previously invisible because the facet's bytecode had been unchanged + since 0.1.1, making the candidate and 0.1.1 addresses coincide. + - `StoxReceipt` — `ST0xOrchestrator`'s vault-logic version lock compares the + live vault and receipt beacon implementations against + `LibProdDeployCurrent`. The receipt's address moved even though its source + did not, so the orchestrator halts mint/burn until a new receipt + implementation is deployed and its beacon repointed. + + Only the first of these is required by the H01 fix; the other two are + consequences of the optimizer change. + - The `testDeployAddress*` assertions for `StoxReceipt`, + `StoxWrappedTokenVault`, `StoxWrappedTokenVaultBeacon` and both authorizers + are re-pointed from the frozen `_0_1_1` pins to `_CANDIDATE`, matching what + `StoxReceiptVault` already did. `0_1_1` stays as the frozen historical + record of what is live on Base; `testFrozenRedeploy*` keeps proving those + snapshots redeploy reproducibly, independent of the current optimizer + setting, and the on-chain fork codehash tests still compare live code to the + unchanged `0_1_1` pins. + - The property given up is "a fresh build of current source reproduces the + _previously released_ artifacts". Verifying those against the repo now means + using the frozen snapshot rather than a fresh build. Deploying the stack to + a **new chain** must likewise use the frozen creation code to keep addresses + identical to Base. + - Runtime gas rises across all contracts. `.gas-snapshot` is stale as a + result; it is not gate-checked by CI (`rainix-sol-test` is just + `forge test -vvv`) and should be regenerated in CI, where the fork-test RPC + secrets are available. + ### New contracts - **ST0xOrchestrator**: Singleton mint/burn proxy for the whole ST0x diff --git a/foundry.toml b/foundry.toml index 39d02ebb..671b189f 100644 --- a/foundry.toml +++ b/foundry.toml @@ -17,12 +17,20 @@ optimizer = true # `optimizer_runs` is a runtime-gas vs deploy-bytecode tradeoff: higher values # inline aggressively for faster runtime at the cost of larger deployed # bytecode. StoxReceiptVault is the contract that binds against the EIP-170 -# 24,576-byte runtime limit; 5000 keeps it under the limit while the rest of -# the suite stays well clear. The margin is thin and sensitive to vault source -# changes and dependency-tree bytecode shifts — re-check StoxReceiptVault's -# `forge build --sizes` runtime margin on any such change. via_ir is OFF (tried -# in #144, made the vault larger for this inheritance shape). -optimizer_runs = 5000 +# 24,576-byte runtime limit; 2000 leaves it at 24,037 (539 bytes spare) while +# the rest of the suite stays well clear. This was lowered from 5000, which +# left only a 6-byte margin (24,570) and could not fit the audit-H01 +# `_totalSupply` sync — see CHANGELOG. The margin is still sensitive to vault +# source changes and dependency-tree bytecode shifts — re-check +# StoxReceiptVault's `forge build --sizes` runtime margin on any such change. +# +# Changing this value moves EVERY contract's deterministic Zoltu address, which +# is a coordinated-release event, NOT a drive-by: StoxReceiptVault pins the +# corporate-actions facet address, and ST0xOrchestrator's version lock pins the +# vault + receipt implementations, so all three must be deployed in lockstep. +# via_ir is OFF (tried in #144, made the vault larger for this inheritance +# shape). +optimizer_runs = 2000 evm_version = "cancun" diff --git a/src/concrete/StoxReceiptVault.sol b/src/concrete/StoxReceiptVault.sol index 41229ecc..84e8c10e 100644 --- a/src/concrete/StoxReceiptVault.sol +++ b/src/concrete/StoxReceiptVault.sol @@ -149,6 +149,24 @@ contract StoxReceiptVault is OffchainAssetReceiptVault { // Skip the SSTORE when the rasterized balance is unchanged. if (newBalance != storedBalance) { LibERC20Storage.setUnderlyingBalance(account, newBalance); + + // Rebasing rewrites `_balances` behind OZ's back, so apply the same + // delta to OZ's own `_totalSupply` accumulator and preserve its + // `_totalSupply == Σ _balances` invariant. + // + // The raw slot is not the reported supply — `totalSupply()` above + // is the rebase-aware `LibTotalSupply.effectiveTotalSupply()`, and + // the pot accounting in `onAccountMigrated` below is untouched by + // this write. But OZ's `_update` still subtracts from the raw slot + // **unchecked** on burn and adds to it **checked** on mint. Left + // stale, it drifts below the true balance sum, wraps to ~2**256 on + // the first burn that exceeds it, and from then on every mint + // reverts with `Panic(0x11)` — silently, because `totalSupply()`, + // `balanceOf()` and all events keep agreeing with each other. The + // slot has no write path other than mint/burn, so recovering from + // that state would need a beacon implementation upgrade. + // + LibERC20Storage.applyBalanceDeltaToTotalSupply(storedBalance, newBalance); } emit AccountMigrated(account, currentCursor, newCursor, storedBalance, newBalance); diff --git a/src/generated/candidate/ST0xOrchestrator.pointers.sol b/src/generated/candidate/ST0xOrchestrator.pointers.sol index 9fe30271..d08da09e 100644 --- a/src/generated/candidate/ST0xOrchestrator.pointers.sol +++ b/src/generated/candidate/ST0xOrchestrator.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x7537448e8cbb200d25651a941a39e465e2ef7a549fe8245d83774bef485629e6); +bytes32 constant BYTECODE_HASH = bytes32(0xbc2cc8eba1d10bc3b91a61fca8cdca9c18487e5fd99262f07d9703959ae4747c); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x0099FcB947Cc31E21C631478A2a9E2E591cd4010); +address constant DEPLOYED_ADDRESS = address(0x1c3a4D12F88Bd39303Bb8510C6c1fa8Ad37A4b72); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6131c0806100d65f395ff3fe608060405260043610610191575f3560e01c8063742fabb3116100dc578063b930908f11610087578063d547741f11610062578063d547741f14610594578063e9a9c850146105b3578063f14893a7146105e6578063f23a6e6114610605575f80fd5b8063b930908f146104f2578063bc197c8114610525578063c4d66de814610575575f80fd5b806391d14854116100b757806391d148541461045d5780639cb887f8146104c0578063a217fddf146104df575f80fd5b8063742fabb3146103cf578063752c9cf51461042257806384b0196e14610436575f80fd5b80633b94a0dd1161013c57806344d171871161011757806344d1718714610372578063584f418e14610391578063671d083f146103b0575f80fd5b80633b94a0dd146103015780633e81e40d146103345780633f6fc76f14610353575f80fd5b8063248a9ca31161016c578063248a9ca3146102745780632f2ff15d146102c157806336568abe146102e2575f80fd5b806301ffc9a71461019c5780630e230f97146101d057806320df435914610233575f80fd5b3661019857005b5f80fd5b3480156101a7575f80fd5b506101bb6101b6366004612944565b610624565b60405190151581526020015b60405180910390f35b3480156101db575f80fd5b506101bb6101ea366004612973565b6001600160a01b03919091165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be70160209081526040808320938352929052205460ff1690565b34801561023e575f80fd5b506102667f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de81565b6040519081526020016101c7565b34801561027f575f80fd5b5061026661028e36600461299d565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b3480156102cc575f80fd5b506102e06102db3660046129b4565b6106cb565b005b3480156102ed575f80fd5b506102e06102fc3660046129b4565b610714565b34801561030c575f80fd5b506102667f8381bcc05e5203d9456aa7185a19b2be5d4af37909fecf63a6f2016c1bf8413381565b34801561033f575f80fd5b5061026661034e3660046129e2565b610765565b34801561035e575f80fd5b506102e061036d366004612a25565b61077b565b34801561037d575f80fd5b506102e061038c366004612aa9565b610816565b34801561039c575f80fd5b506102e06103ab366004612b01565b610979565b3480156103bb575f80fd5b506102e06103ca366004612b48565b610af3565b3480156103da575f80fd5b506102666103e9366004612be2565b6001600160a01b03165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be700602052604090205490565b34801561042d575f80fd5b506101bb610cbc565b348015610441575f80fd5b5061044a610eb1565b6040516101c79796959493929190612c2b565b348015610468575f80fd5b506101bb6104773660046129b4565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104cb575f80fd5b506102e06104da366004612973565b610f0f565b3480156104ea575f80fd5b506102665f81565b3480156104fd575f80fd5b506102667f04c6a47ae7910ef8b295215a97e8495a9eaf57b7b05bfd8bf951edb3fd4a16a381565b348015610530575f80fd5b5061054461053f366004612d1f565b610fc5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101c7565b348015610580575f80fd5b506102e061058f366004612be2565b611054565b34801561059f575f80fd5b506102e06105ae3660046129b4565b611283565b3480156105be575f80fd5b506102667ffdf81848136595c31bb5f76217767372bc4bf906663038eb38381131ea27ecba81565b3480156105f1575f80fd5b506102e0610600366004612b01565b6112c6565b348015610610575f80fd5b5061054461061f366004612dd6565b6113ce565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e00000000000000000000000000000000000000000000000000000000014806106b657507fffffffff0000000000000000000000000000000000000000000000000000000082167f18bd37da00000000000000000000000000000000000000000000000000000000145b806106c557506106c58261140b565b92915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610704816114a1565b61070e83836114ae565b50505050565b6001600160a01b0381163314610756576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610760828261157a565b505050565b5f6107728585858561161e565b95945050505050565b7f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de6107a5816114a1565b6107ad611694565b6107c16001600160a01b03851683856116cb565b816001600160a01b0316846001600160a01b03167f4810d2f105dcba10d740b4ac1d8fa8454dd37014b2051bace1edb1d903c440c48560405161080691815260200190565b60405180910390a361070e611719565b7f04c6a47ae7910ef8b295215a97e8495a9eaf57b7b05bfd8bf951edb3fd4a16a3610840816114a1565b610848611743565b610850611694565b835f03610889576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61089e6001600160a01b0386163330876119d5565b6001600160a01b0385165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be70060209081526040808320548151601f8701849004840281018401909252858252929161091791899189919089908990819084018382808284375f92019190915250611a2492505050565b60408051888152602081018590529081018290529091506001600160a01b0388169033907f112766730ce440487945c01048dacfc6d04340403f675871e96c4e28cf622ecc9060600160405180910390a35050610972611719565b5050505050565b7f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de6109a3816114a1565b6109ab611694565b846001600160a01b031663e1e6b8986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109e7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0b9190612e3b565b6040517ff242432a0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038481166024830152604482018790526064820186905260a060848301525f60a4830152919091169063f242432a9060c4015f604051808303815f87803b158015610a87575f80fd5b505af1158015610a99573d5f803e3d5ffd5b5050505083826001600160a01b0316866001600160a01b03167fc9e640d2eb1b8469e42f60a66fef6a05cfd27ee3757e48f3f8ba04ecbc8a51b086604051610ae391815260200190565b60405180910390a4610972611719565b7ffdf81848136595c31bb5f76217767372bc4bf906663038eb38381131ea27ecba610b1d816114a1565b610b25611743565b610b2d611694565b845f03610b66576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7287878787611d57565b6040517fc77b66c20000000000000000000000000000000000000000000000000000000081525f906001600160a01b0389169063c77b66c290610bc1908990309086908a908a90600401612e56565b6020604051808303815f875af1158015610bdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c019190612ea2565b9050858114610c4b576040517fbe40f1fc00000000000000000000000000000000000000000000000000000000815260048101879052602481018290526044015b60405180910390fd5b610c5f6001600160a01b03891688886116cb565b60408051878152863560208201526001600160a01b03808a1692908b169133917f7c0eac1a8d30fbe7a577affc3b588a0b7d965a6133d12097cfac0760f2f2b617910160405180910390a450610cb3611719565b50505050505050565b5f8073679ab223dab158ea93e1a4f49104de436c58eab8905073d7f91c1c6e6e651ec3f1fd707af7cbb7526206e16001600160a01b0316816001600160a01b0316632f77a1c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d539190612e3b565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db29190612e3b565b6001600160a01b0316148015610eab5750732df5cfe6d688ef9ff1b7c59a499d254b1527b2866001600160a01b0316816001600160a01b0316632c9b7f406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e419190612e3b565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea09190612e3b565b6001600160a01b0316145b91505090565b5f6060805f805f6060610ec2611e95565b610eca611f68565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b7f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de610f39816114a1565b610f41611694565b5f7f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be7006001600160a01b0385165f818152602083815260409182902080549088905582518181529182018890529394507fc6ce8282d3b57b159503fa5566e612aeb9f30c8e20c882398c9cb293c1ba6d68910160405180910390a25050610760611719565b5f805b86811015611025578481108015610ff657505f868683818110610fed57610fed612ee6565b90506020020135115b1561101d5761101d3389898481811061101157611011612ee6565b90506020020135611fb9565b600101610fc8565b507fbc197c81000000000000000000000000000000000000000000000000000000009998505050505050505050565b5f61105d612222565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156110895750825b90505f8267ffffffffffffffff1660011480156110a55750303b155b9050811580156110b3575080155b156110ea576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561114b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03861661118b576040517f9905827b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611193611743565b61119b61224a565b61120f6040518060400160405280601081526020017f535430784f7263686573747261746f72000000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250612252565b6112195f876114ae565b50831561127b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546112bc816114a1565b61070e838361157a565b7f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de6112f0816114a1565b6112f8611694565b6040517ff242432a0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038381166024830152604482018690526064820185905260a060848301525f60a483015286169063f242432a9060c4015f604051808303815f87803b158015611372575f80fd5b505af1158015611384573d5f803e3d5ffd5b5050505083826001600160a01b0316866001600160a01b03167f78b19b4b6e69e380c3c303d1e889d510ee3ee409219c1c014d97a0a607b6c6a686604051610ae391815260200190565b5f83156113df576113df3386611fb9565b507ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806106c557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146106c5565b6114ab8133612268565b50565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611571575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556115273390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506106c5565b5f9150506106c5565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611571575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506106c5565b604080517f8381bcc05e5203d9456aa7185a19b2be5d4af37909fecf63a6f2016c1bf8413360208201526001600160a01b038087169282019290925290841660608201526080810183905260a081018290525f906107729060c001604051602081830303815290604052805190602001206122f4565b61169c61233b565b6116c960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b90612394565b565b6116d8838383600161239b565b610760576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610c42565b6116c95f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f006116c3565b5f73679ab223dab158ea93e1a4f49104de436c58eab890505f816001600160a01b0316632f77a1c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611798573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117bc9190612e3b565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061181b9190612e3b565b90506001600160a01b03811673d7f91c1c6e6e651ec3f1fd707af7cbb7526206e114611898576040517fdfdb61b700000000000000000000000000000000000000000000000000000000815273d7f91c1c6e6e651ec3f1fd707af7cbb7526206e160048201526001600160a01b0382166024820152604401610c42565b5f826001600160a01b0316632c9b7f406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118f99190612e3b565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611934573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119589190612e3b565b90506001600160a01b038116732df5cfe6d688ef9ff1b7c59a499d254b1527b28614610760576040517f3e4077b3000000000000000000000000000000000000000000000000000000008152732df5cfe6d688ef9ff1b7c59a499d254b1527b28660048201526001600160a01b0382166024820152604401610c42565b6119e3848484846001612416565b61070e576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610c42565b5f808490505f816001600160a01b031663e1e6b8986040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a8a9190612e3b565b90507f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be7005f015f876001600160a01b03166001600160a01b031681526020019081526020015f205492505f826001600160a01b031663f5d214f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b10573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b349190612ea2565b90505b8515611d125780841115611b89576040517f66a21a2d0000000000000000000000000000000000000000000000000000000081526001600160a01b038816600482015260248101879052604401610c42565b6040517efdd58e000000000000000000000000000000000000000000000000000000008152306004820152602481018590525f906001600160a01b0384169062fdd58e90604401602060405180830381865afa158015611beb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c0f9190612ea2565b9050805f03611c245750600190930192611b37565b5f818810611c325781611c34565b875b90505f856001600160a01b031663921a4c428330308b8d6040518663ffffffff1660e01b8152600401611c6b959493929190612f13565b6020604051808303815f875af1158015611c87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cab9190612ea2565b9050818114611cf0576040517fbe40f1fc0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610c42565b611cfa828a612f55565b9850828203611d0a576001909601955b505050611b37565b5050506001600160a01b03939093165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be700602052604090208390555090919050565b6001600160a01b0383165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be70160209081526040808320843584529091529020547f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be7009060ff1615611e08576040517f59c210430000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015282356024820152604401610c42565b6001600160a01b0384165f90815260018281016020908152604080842086358086529252909220805460ff19169091179055610972908590611e4f9088908390889061161e565b611e5c6020860186612f8d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061249c92505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10091611ee690612fee565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1290612fee565b8015611f5d5780601f10611f3457610100808354040283529160200191611f5d565b820191905f5260205f20905b815481529060010190602001808311611f4057829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10380546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10091611ee690612fee565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f481c6a750000000000000000000000000000000000000000000000000000000017905290515f9182916001600160a01b038616916120299161303f565b5f60405180830381855afa9150503d805f8114612061576040519150601f19603f3d011682016040523d82523d5f602084013e612066565b606091505b509150915081158061207a57508051602014155b156120855750505050565b5f61208f82613055565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1e6b8980000000000000000000000000000000000000000000000000000000017905290519192506001600160a01b038316916120ff919061303f565b5f60405180830381855afa9150503d805f8114612137576040519150601f19603f3d011682016040523d82523d5f602084013e61213c565b606091505b50909350915082158061215157508151602014155b1561215d575050505050565b6001600160a01b03851661217083613055565b6001600160a01b031614612185575050505050565b6001600160a01b0381165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be700602081905260409091205480861015610cb3576001600160a01b0383165f818152602084815260409182902089905581518481529081018990527f2008c207f65bedc2bb65dc8ac34aee36a37cd43a50152d574107c63ace7e07c6910160405180910390a250505050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006106c5565b6116c96125cb565b61225a6125cb565b6122648282612609565b5050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16612264576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610c42565b5f6106c561230061266c565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c156116c9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825d5050565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f5114831661240a5783831516156123fe573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040517f23b872dd000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661248b57838315161561247f573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b8051156124e4576124ae83838361267a565b610760576040517f19ab93cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f642ddf3a0000000000000000000000000000000000000000000000000000000080825260048201849052906001600160a01b0385169063642ddf3a906024016020604051808303815f875af1158015612543573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125679190613078565b7fffffffff000000000000000000000000000000000000000000000000000000001614610760576040517f22b89c080000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610c42565b6125d36126ed565b6116c9576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126116125cb565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10261265d84826130d7565b506003810161070e83826130d7565b5f61267561270b565b905090565b5f836001600160a01b03163b5f036126d8575f80612698858561277e565b5090925090505f8160038111156126b1576126b1613193565b1480156126cf5750856001600160a01b0316826001600160a01b0316145b925050506126e6565b6126e38484846127c7565b90505b9392505050565b5f6126f6612222565b5468010000000000000000900460ff16919050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612735612831565b61273d612846565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f805f83516041036127b5576020840151604085015160608601515f1a6127a78882858561284f565b9550955095505050506127c0565b505081515f91506002905b9250925092565b8051604080517f1626ba7e000000000000000000000000000000000000000000000000000000008082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f61283a611e95565b80519060200120905090565b5f61283a611f68565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561288857505f9150600390508261290d565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156128d9573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661290457505f92506001915082905061290d565b92505f91508190505b9450945094915050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146114ab575f80fd5b5f60208284031215612954575f80fd5b81356126e681612917565b6001600160a01b03811681146114ab575f80fd5b5f8060408385031215612984575f80fd5b823561298f8161295f565b946020939093013593505050565b5f602082840312156129ad575f80fd5b5035919050565b5f80604083850312156129c5575f80fd5b8235915060208301356129d78161295f565b809150509250929050565b5f805f80608085870312156129f5575f80fd5b8435612a008161295f565b93506020850135612a108161295f565b93969395505050506040820135916060013590565b5f805f60608486031215612a37575f80fd5b8335612a428161295f565b9250602084013591506040840135612a598161295f565b809150509250925092565b5f8083601f840112612a74575f80fd5b50813567ffffffffffffffff811115612a8b575f80fd5b602083019150836020828501011115612aa2575f80fd5b9250929050565b5f805f8060608587031215612abc575f80fd5b8435612ac78161295f565b935060208501359250604085013567ffffffffffffffff811115612ae9575f80fd5b612af587828801612a64565b95989497509550505050565b5f805f8060808587031215612b14575f80fd5b8435612b1f8161295f565b935060208501359250604085013591506060850135612b3d8161295f565b939692955090935050565b5f805f805f8060a08789031215612b5d575f80fd5b8635612b688161295f565b95506020870135612b788161295f565b945060408701359350606087013567ffffffffffffffff80821115612b9b575f80fd5b908801906040828b031215612bae575f80fd5b90935060808801359080821115612bc3575f80fd5b50612bd089828a01612a64565b979a9699509497509295939492505050565b5f60208284031215612bf2575f80fd5b81356126e68161295f565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681525f602060e06020840152612c6760e084018a612bfd565b8381036040850152612c79818a612bfd565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b81811015612ccc57835183529284019291840191600101612cb0565b50909c9b505050505050505050505050565b5f8083601f840112612cee575f80fd5b50813567ffffffffffffffff811115612d05575f80fd5b6020830191508360208260051b8501011115612aa2575f80fd5b5f805f805f805f8060a0898b031215612d36575f80fd5b8835612d418161295f565b97506020890135612d518161295f565b9650604089013567ffffffffffffffff80821115612d6d575f80fd5b612d798c838d01612cde565b909850965060608b0135915080821115612d91575f80fd5b612d9d8c838d01612cde565b909650945060808b0135915080821115612db5575f80fd5b50612dc28b828c01612a64565b999c989b5096995094979396929594505050565b5f805f805f8060a08789031215612deb575f80fd5b8635612df68161295f565b95506020870135612e068161295f565b94506040870135935060608701359250608087013567ffffffffffffffff811115612e2f575f80fd5b612bd089828a01612a64565b5f60208284031215612e4b575f80fd5b81516126e68161295f565b8581526001600160a01b038516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f19160101949350505050565b5f60208284031215612eb2575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8581525f6001600160a01b03808716602084015280861660408401525083606083015260a06080830152612f4a60a0830184612bfd565b979650505050505050565b818103818111156106c5577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612fc0575f80fd5b83018035915067ffffffffffffffff821115612fda575f80fd5b602001915036819003821315612aa2575f80fd5b600181811c9082168061300257607f821691505b602082108103613039577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f82518060208501845e5f920191825250919050565b80516020808301519190811015613039575f1960209190910360031b1b16919050565b5f60208284031215613088575f80fd5b81516126e681612917565b601f82111561076057805f5260205f20601f840160051c810160208510156130b85750805b601f840160051c820191505b81811015610972575f81556001016130c4565b815167ffffffffffffffff8111156130f1576130f1612eb9565b613105816130ff8454612fee565b84613093565b602080601f831160018114613138575f84156131215750858301515b5f19600386901b1c1916600185901b17855561127b565b5f85815260208120601f198616915b8281101561316657888601518255948401946001909101908401613147565b508582101561318357878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd"; + hex"6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61306f806100d65f395ff3fe608060405260043610610191575f3560e01c8063742fabb3116100dc578063b930908f11610087578063d547741f11610062578063d547741f1461057c578063e9a9c8501461059b578063f14893a7146105ce578063f23a6e61146105ed575f80fd5b8063b930908f146104f2578063bc197c8114610525578063c4d66de81461055d575f80fd5b806391d14854116100b757806391d148541461045d5780639cb887f8146104c0578063a217fddf146104df575f80fd5b8063742fabb3146103cf578063752c9cf51461042257806384b0196e14610436575f80fd5b80633b94a0dd1161013c57806344d171871161011757806344d1718714610372578063584f418e14610391578063671d083f146103b0575f80fd5b80633b94a0dd146103015780633e81e40d146103345780633f6fc76f14610353575f80fd5b8063248a9ca31161016c578063248a9ca3146102745780632f2ff15d146102c157806336568abe146102e2575f80fd5b806301ffc9a71461019c5780630e230f97146101d057806320df435914610233575f80fd5b3661019857005b5f80fd5b3480156101a7575f80fd5b506101bb6101b6366004612870565b61060c565b60405190151581526020015b60405180910390f35b3480156101db575f80fd5b506101bb6101ea36600461289f565b6001600160a01b03919091165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be70160209081526040808320938352929052205460ff1690565b34801561023e575f80fd5b506102667f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de81565b6040519081526020016101c7565b34801561027f575f80fd5b5061026661028e3660046128c9565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b3480156102cc575f80fd5b506102e06102db3660046128e0565b610683565b005b3480156102ed575f80fd5b506102e06102fc3660046128e0565b6106cc565b34801561030c575f80fd5b506102667f8381bcc05e5203d9456aa7185a19b2be5d4af37909fecf63a6f2016c1bf8413381565b34801561033f575f80fd5b5061026661034e36600461290e565b61071d565b34801561035e575f80fd5b506102e061036d366004612951565b610733565b34801561037d575f80fd5b506102e061038c3660046129d5565b6107ce565b34801561039c575f80fd5b506102e06103ab366004612a2d565b610931565b3480156103bb575f80fd5b506102e06103ca366004612a74565b610aab565b3480156103da575f80fd5b506102666103e9366004612b0e565b6001600160a01b03165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be700602052604090205490565b34801561042d575f80fd5b506101bb610c74565b348015610441575f80fd5b5061044a610e69565b6040516101c79796959493929190612b57565b348015610468575f80fd5b506101bb6104773660046128e0565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104cb575f80fd5b506102e06104da36600461289f565b610ec7565b3480156104ea575f80fd5b506102665f81565b3480156104fd575f80fd5b506102667f04c6a47ae7910ef8b295215a97e8495a9eaf57b7b05bfd8bf951edb3fd4a16a381565b348015610530575f80fd5b5061054461053f366004612c4b565b610f7d565b6040516001600160e01b031990911681526020016101c7565b348015610568575f80fd5b506102e0610577366004612b0e565b61100c565b348015610587575f80fd5b506102e06105963660046128e0565b61120f565b3480156105a6575f80fd5b506102667ffdf81848136595c31bb5f76217767372bc4bf906663038eb38381131ea27ecba81565b3480156105d9575f80fd5b506102e06105e8366004612a2d565b611252565b3480156105f8575f80fd5b50610544610607366004612d02565b61135a565b5f6001600160e01b031982167f4e2312e000000000000000000000000000000000000000000000000000000000148061066e57506001600160e01b031982167f18bd37da00000000000000000000000000000000000000000000000000000000145b8061067d575061067d82611397565b92915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546106bc816113fd565b6106c6838361140a565b50505050565b6001600160a01b038116331461070e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61071882826114d6565b505050565b5f61072a8585858561157a565b95945050505050565b7f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de61075d816113fd565b6107656115f0565b6107796001600160a01b0385168385611627565b816001600160a01b0316846001600160a01b03167f4810d2f105dcba10d740b4ac1d8fa8454dd37014b2051bace1edb1d903c440c4856040516107be91815260200190565b60405180910390a36106c6611675565b7f04c6a47ae7910ef8b295215a97e8495a9eaf57b7b05bfd8bf951edb3fd4a16a36107f8816113fd565b61080061169f565b6108086115f0565b835f03610841576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108566001600160a01b038616333087611931565b6001600160a01b0385165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be70060209081526040808320548151601f870184900484028101840190925285825292916108cf91899189919089908990819084018382808284375f9201919091525061198092505050565b60408051888152602081018590529081018290529091506001600160a01b0388169033907f112766730ce440487945c01048dacfc6d04340403f675871e96c4e28cf622ecc9060600160405180910390a3505061092a611675565b5050505050565b7f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de61095b816113fd565b6109636115f0565b846001600160a01b031663e1e6b8986040518163ffffffff1660e01b8152600401602060405180830381865afa15801561099f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c39190612d67565b6040517ff242432a0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038481166024830152604482018790526064820186905260a060848301525f60a4830152919091169063f242432a9060c4015f604051808303815f87803b158015610a3f575f80fd5b505af1158015610a51573d5f803e3d5ffd5b5050505083826001600160a01b0316866001600160a01b03167fc9e640d2eb1b8469e42f60a66fef6a05cfd27ee3757e48f3f8ba04ecbc8a51b086604051610a9b91815260200190565b60405180910390a461092a611675565b7ffdf81848136595c31bb5f76217767372bc4bf906663038eb38381131ea27ecba610ad5816113fd565b610add61169f565b610ae56115f0565b845f03610b1e576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b2a87878787611cb3565b6040517fc77b66c20000000000000000000000000000000000000000000000000000000081525f906001600160a01b0389169063c77b66c290610b79908990309086908a908a90600401612d82565b6020604051808303815f875af1158015610b95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb99190612dce565b9050858114610c03576040517fbe40f1fc00000000000000000000000000000000000000000000000000000000815260048101879052602481018290526044015b60405180910390fd5b610c176001600160a01b0389168888611627565b60408051878152863560208201526001600160a01b03808a1692908b169133917f7c0eac1a8d30fbe7a577affc3b588a0b7d965a6133d12097cfac0760f2f2b617910160405180910390a450610c6b611675565b50505050505050565b5f807359afe8ae48de65d9916b99c8cf9977061955c9a790507352174538a83b18462c5cf898016539b086c920c76001600160a01b0316816001600160a01b0316632f77a1c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ce7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0b9190612d67565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d46573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6a9190612d67565b6001600160a01b0316148015610e63575073b092f127bd44f19bfa96e78db4beaf1066d2914e6001600160a01b0316816001600160a01b0316632c9b7f406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610df99190612d67565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e589190612d67565b6001600160a01b0316145b91505090565b5f6060805f805f6060610e7a611df1565b610e82611ec4565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b7f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de610ef1816113fd565b610ef96115f0565b5f7f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be7006001600160a01b0385165f818152602083815260409182902080549088905582518181529182018890529394507fc6ce8282d3b57b159503fa5566e612aeb9f30c8e20c882398c9cb293c1ba6d68910160405180910390a25050610718611675565b5f805b86811015610fdd578481108015610fae57505f868683818110610fa557610fa5612df9565b90506020020135115b15610fd557610fd533898984818110610fc957610fc9612df9565b90506020020135611f15565b600101610f80565b507fbc197c81000000000000000000000000000000000000000000000000000000009998505050505050505050565b5f61101561217e565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156110415750825b90505f8267ffffffffffffffff16600114801561105d5750303b155b90508115801561106b575080155b156110a2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156110ed57845468ff00000000000000001916680100000000000000001785555b6001600160a01b03861661112d576040517f9905827b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61113561169f565b61113d6121a6565b6111b16040518060400160405280601081526020017f535430784f7263686573747261746f72000000000000000000000000000000008152506040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506121ae565b6111bb5f8761140a565b50831561120757845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611248816113fd565b6106c683836114d6565b7f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de61127c816113fd565b6112846115f0565b6040517ff242432a0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038381166024830152604482018690526064820185905260a060848301525f60a483015286169063f242432a9060c4015f604051808303815f87803b1580156112fe575f80fd5b505af1158015611310573d5f803e3d5ffd5b5050505083826001600160a01b0316866001600160a01b03167f78b19b4b6e69e380c3c303d1e889d510ee3ee409219c1c014d97a0a607b6c6a686604051610a9b91815260200190565b5f831561136b5761136b3386611f15565b507ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b5f6001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061067d57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b031983161461067d565b61140781336121c4565b50565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166114cd575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556114833390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061067d565b5f91505061067d565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156114cd575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061067d565b604080517f8381bcc05e5203d9456aa7185a19b2be5d4af37909fecf63a6f2016c1bf8413360208201526001600160a01b038087169282019290925290841660608201526080810183905260a081018290525f9061072a9060c00160405160208183030381529060405280519060200120612250565b6115f8612297565b61162560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b906122f0565b565b61163483838360016122f7565b610718576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610bfa565b6116255f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0061161f565b5f7359afe8ae48de65d9916b99c8cf9977061955c9a790505f816001600160a01b0316632f77a1c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117189190612d67565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611753573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117779190612d67565b90506001600160a01b0381167352174538a83b18462c5cf898016539b086c920c7146117f4576040517fdfdb61b70000000000000000000000000000000000000000000000000000000081527352174538a83b18462c5cf898016539b086c920c760048201526001600160a01b0382166024820152604401610bfa565b5f826001600160a01b0316632c9b7f406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611831573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118559190612d67565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611890573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118b49190612d67565b90506001600160a01b03811673b092f127bd44f19bfa96e78db4beaf1066d2914e14610718576040517f3e4077b300000000000000000000000000000000000000000000000000000000815273b092f127bd44f19bfa96e78db4beaf1066d2914e60048201526001600160a01b0382166024820152604401610bfa565b61193f848484846001612372565b6106c6576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610bfa565b5f808490505f816001600160a01b031663e1e6b8986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119e69190612d67565b90507f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be7005f015f876001600160a01b03166001600160a01b031681526020019081526020015f205492505f826001600160a01b031663f5d214f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a909190612dce565b90505b8515611c6e5780841115611ae5576040517f66a21a2d0000000000000000000000000000000000000000000000000000000081526001600160a01b038816600482015260248101879052604401610bfa565b6040517efdd58e000000000000000000000000000000000000000000000000000000008152306004820152602481018590525f906001600160a01b0384169062fdd58e90604401602060405180830381865afa158015611b47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b6b9190612dce565b9050805f03611b805750600190930192611a93565b5f818810611b8e5781611b90565b875b90505f856001600160a01b031663921a4c428330308b8d6040518663ffffffff1660e01b8152600401611bc7959493929190612e0d565b6020604051808303815f875af1158015611be3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c079190612dce565b9050818114611c4c576040517fbe40f1fc0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610bfa565b611c56828a612e4f565b9850828203611c66576001909601955b505050611a93565b5050506001600160a01b03939093165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be700602052604090208390555090919050565b6001600160a01b0383165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be70160209081526040808320843584529091529020547f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be7009060ff1615611d64576040517f59c210430000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015282356024820152604401610bfa565b6001600160a01b0384165f90815260018281016020908152604080842086358086529252909220805460ff1916909117905561092a908590611dab9088908390889061157a565b611db86020860186612e6e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506123f892505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10091611e4290612ecf565b80601f0160208091040260200160405190810160405280929190818152602001828054611e6e90612ecf565b8015611eb95780601f10611e9057610100808354040283529160200191611eb9565b820191905f5260205f20905b815481529060010190602001808311611e9c57829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10380546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10091611e4290612ecf565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f481c6a750000000000000000000000000000000000000000000000000000000017905290515f9182916001600160a01b03861691611f8591612f07565b5f60405180830381855afa9150503d805f8114611fbd576040519150601f19603f3d011682016040523d82523d5f602084013e611fc2565b606091505b5091509150811580611fd657508051602014155b15611fe15750505050565b5f611feb82612f1d565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1e6b8980000000000000000000000000000000000000000000000000000000017905290519192506001600160a01b0383169161205b9190612f07565b5f60405180830381855afa9150503d805f8114612093576040519150601f19603f3d011682016040523d82523d5f602084013e612098565b606091505b5090935091508215806120ad57508151602014155b156120b9575050505050565b6001600160a01b0385166120cc83612f1d565b6001600160a01b0316146120e1575050505050565b6001600160a01b0381165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be700602081905260409091205480861015610c6b576001600160a01b0383165f818152602084815260409182902089905581518481529081018990527f2008c207f65bedc2bb65dc8ac34aee36a37cd43a50152d574107c63ace7e07c6910160405180910390a250505050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061067d565b61162561250f565b6121b661250f565b6121c0828261254d565b5050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166121c0576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610bfa565b5f61067d61225c6125b0565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c15611625576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825d5050565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f5114831661236657838315161561235a573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040517f23b872dd000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f511483166123e75783831516156123db573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b8051156124405761240a8383836125be565b610718576040517f19ab93cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f642ddf3a0000000000000000000000000000000000000000000000000000000080825260048201849052906001600160a01b0385169063642ddf3a906024016020604051808303815f875af115801561249f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124c39190612f40565b6001600160e01b03191614610718576040517f22b89c080000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610bfa565b612517612631565b611625576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61255561250f565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026125a18482612f9f565b50600381016106c68382612f9f565b5f6125b961264f565b905090565b5f836001600160a01b03163b5f0361261c575f806125dc85856126c2565b5090925090505f8160038111156125f5576125f561305b565b1480156126135750856001600160a01b0316826001600160a01b0316145b9250505061262a565b61262784848461270b565b90505b9392505050565b5f61263a61217e565b5468010000000000000000900460ff16919050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612679612775565b61268161278a565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f805f83516041036126f9576020840151604085015160608601515f1a6126eb88828585612793565b955095509550505050612704565b505081515f91506002905b9250925092565b8051604080517f1626ba7e000000000000000000000000000000000000000000000000000000008082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f61277e611df1565b80519060200120905090565b5f61277e611ec4565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156127cc57505f91506003905082612851565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561281d573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661284857505f925060019150829050612851565b92505f91508190505b9450945094915050565b6001600160e01b031981168114611407575f80fd5b5f60208284031215612880575f80fd5b813561262a8161285b565b6001600160a01b0381168114611407575f80fd5b5f80604083850312156128b0575f80fd5b82356128bb8161288b565b946020939093013593505050565b5f602082840312156128d9575f80fd5b5035919050565b5f80604083850312156128f1575f80fd5b8235915060208301356129038161288b565b809150509250929050565b5f805f8060808587031215612921575f80fd5b843561292c8161288b565b9350602085013561293c8161288b565b93969395505050506040820135916060013590565b5f805f60608486031215612963575f80fd5b833561296e8161288b565b92506020840135915060408401356129858161288b565b809150509250925092565b5f8083601f8401126129a0575f80fd5b50813567ffffffffffffffff8111156129b7575f80fd5b6020830191508360208285010111156129ce575f80fd5b9250929050565b5f805f80606085870312156129e8575f80fd5b84356129f38161288b565b935060208501359250604085013567ffffffffffffffff811115612a15575f80fd5b612a2187828801612990565b95989497509550505050565b5f805f8060808587031215612a40575f80fd5b8435612a4b8161288b565b935060208501359250604085013591506060850135612a698161288b565b939692955090935050565b5f805f805f8060a08789031215612a89575f80fd5b8635612a948161288b565b95506020870135612aa48161288b565b945060408701359350606087013567ffffffffffffffff80821115612ac7575f80fd5b908801906040828b031215612ada575f80fd5b90935060808801359080821115612aef575f80fd5b50612afc89828a01612990565b979a9699509497509295939492505050565b5f60208284031215612b1e575f80fd5b813561262a8161288b565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681525f602060e06020840152612b9360e084018a612b29565b8381036040850152612ba5818a612b29565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b81811015612bf857835183529284019291840191600101612bdc565b50909c9b505050505050505050505050565b5f8083601f840112612c1a575f80fd5b50813567ffffffffffffffff811115612c31575f80fd5b6020830191508360208260051b85010111156129ce575f80fd5b5f805f805f805f8060a0898b031215612c62575f80fd5b8835612c6d8161288b565b97506020890135612c7d8161288b565b9650604089013567ffffffffffffffff80821115612c99575f80fd5b612ca58c838d01612c0a565b909850965060608b0135915080821115612cbd575f80fd5b612cc98c838d01612c0a565b909650945060808b0135915080821115612ce1575f80fd5b50612cee8b828c01612990565b999c989b5096995094979396929594505050565b5f805f805f8060a08789031215612d17575f80fd5b8635612d228161288b565b95506020870135612d328161288b565b94506040870135935060608701359250608087013567ffffffffffffffff811115612d5b575f80fd5b612afc89828a01612990565b5f60208284031215612d77575f80fd5b815161262a8161288b565b8581526001600160a01b038516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f19160101949350505050565b5f60208284031215612dde575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b8581525f6001600160a01b03808716602084015280861660408401525083606083015260a06080830152612e4460a0830184612b29565b979650505050505050565b8181038181111561067d57634e487b7160e01b5f52601160045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612ea1575f80fd5b83018035915067ffffffffffffffff821115612ebb575f80fd5b6020019150368190038213156129ce575f80fd5b600181811c90821680612ee357607f821691505b602082108103612f0157634e487b7160e01b5f52602260045260245ffd5b50919050565b5f82518060208501845e5f920191825250919050565b80516020808301519190811015612f01575f1960209190910360031b1b16919050565b5f60208284031215612f50575f80fd5b815161262a8161285b565b601f82111561071857805f5260205f20601f840160051c81016020851015612f805750805b601f840160051c820191505b8181101561092a575f8155600101612f8c565b815167ffffffffffffffff811115612fb957612fb9612de5565b612fcd81612fc78454612ecf565b84612f5b565b602080601f831160018114613000575f8415612fe95750858301515b5f19600386901b1c1916600185901b178555611207565b5f85815260208120601f198616915b8281101561302e5788860151825594840194600190910190840161300f565b508582101561304b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffd"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405260043610610191575f3560e01c8063742fabb3116100dc578063b930908f11610087578063d547741f11610062578063d547741f14610594578063e9a9c850146105b3578063f14893a7146105e6578063f23a6e6114610605575f80fd5b8063b930908f146104f2578063bc197c8114610525578063c4d66de814610575575f80fd5b806391d14854116100b757806391d148541461045d5780639cb887f8146104c0578063a217fddf146104df575f80fd5b8063742fabb3146103cf578063752c9cf51461042257806384b0196e14610436575f80fd5b80633b94a0dd1161013c57806344d171871161011757806344d1718714610372578063584f418e14610391578063671d083f146103b0575f80fd5b80633b94a0dd146103015780633e81e40d146103345780633f6fc76f14610353575f80fd5b8063248a9ca31161016c578063248a9ca3146102745780632f2ff15d146102c157806336568abe146102e2575f80fd5b806301ffc9a71461019c5780630e230f97146101d057806320df435914610233575f80fd5b3661019857005b5f80fd5b3480156101a7575f80fd5b506101bb6101b6366004612944565b610624565b60405190151581526020015b60405180910390f35b3480156101db575f80fd5b506101bb6101ea366004612973565b6001600160a01b03919091165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be70160209081526040808320938352929052205460ff1690565b34801561023e575f80fd5b506102667f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de81565b6040519081526020016101c7565b34801561027f575f80fd5b5061026661028e36600461299d565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b3480156102cc575f80fd5b506102e06102db3660046129b4565b6106cb565b005b3480156102ed575f80fd5b506102e06102fc3660046129b4565b610714565b34801561030c575f80fd5b506102667f8381bcc05e5203d9456aa7185a19b2be5d4af37909fecf63a6f2016c1bf8413381565b34801561033f575f80fd5b5061026661034e3660046129e2565b610765565b34801561035e575f80fd5b506102e061036d366004612a25565b61077b565b34801561037d575f80fd5b506102e061038c366004612aa9565b610816565b34801561039c575f80fd5b506102e06103ab366004612b01565b610979565b3480156103bb575f80fd5b506102e06103ca366004612b48565b610af3565b3480156103da575f80fd5b506102666103e9366004612be2565b6001600160a01b03165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be700602052604090205490565b34801561042d575f80fd5b506101bb610cbc565b348015610441575f80fd5b5061044a610eb1565b6040516101c79796959493929190612c2b565b348015610468575f80fd5b506101bb6104773660046129b4565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104cb575f80fd5b506102e06104da366004612973565b610f0f565b3480156104ea575f80fd5b506102665f81565b3480156104fd575f80fd5b506102667f04c6a47ae7910ef8b295215a97e8495a9eaf57b7b05bfd8bf951edb3fd4a16a381565b348015610530575f80fd5b5061054461053f366004612d1f565b610fc5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101c7565b348015610580575f80fd5b506102e061058f366004612be2565b611054565b34801561059f575f80fd5b506102e06105ae3660046129b4565b611283565b3480156105be575f80fd5b506102667ffdf81848136595c31bb5f76217767372bc4bf906663038eb38381131ea27ecba81565b3480156105f1575f80fd5b506102e0610600366004612b01565b6112c6565b348015610610575f80fd5b5061054461061f366004612dd6565b6113ce565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e00000000000000000000000000000000000000000000000000000000014806106b657507fffffffff0000000000000000000000000000000000000000000000000000000082167f18bd37da00000000000000000000000000000000000000000000000000000000145b806106c557506106c58261140b565b92915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610704816114a1565b61070e83836114ae565b50505050565b6001600160a01b0381163314610756576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610760828261157a565b505050565b5f6107728585858561161e565b95945050505050565b7f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de6107a5816114a1565b6107ad611694565b6107c16001600160a01b03851683856116cb565b816001600160a01b0316846001600160a01b03167f4810d2f105dcba10d740b4ac1d8fa8454dd37014b2051bace1edb1d903c440c48560405161080691815260200190565b60405180910390a361070e611719565b7f04c6a47ae7910ef8b295215a97e8495a9eaf57b7b05bfd8bf951edb3fd4a16a3610840816114a1565b610848611743565b610850611694565b835f03610889576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61089e6001600160a01b0386163330876119d5565b6001600160a01b0385165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be70060209081526040808320548151601f8701849004840281018401909252858252929161091791899189919089908990819084018382808284375f92019190915250611a2492505050565b60408051888152602081018590529081018290529091506001600160a01b0388169033907f112766730ce440487945c01048dacfc6d04340403f675871e96c4e28cf622ecc9060600160405180910390a35050610972611719565b5050505050565b7f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de6109a3816114a1565b6109ab611694565b846001600160a01b031663e1e6b8986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109e7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0b9190612e3b565b6040517ff242432a0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038481166024830152604482018790526064820186905260a060848301525f60a4830152919091169063f242432a9060c4015f604051808303815f87803b158015610a87575f80fd5b505af1158015610a99573d5f803e3d5ffd5b5050505083826001600160a01b0316866001600160a01b03167fc9e640d2eb1b8469e42f60a66fef6a05cfd27ee3757e48f3f8ba04ecbc8a51b086604051610ae391815260200190565b60405180910390a4610972611719565b7ffdf81848136595c31bb5f76217767372bc4bf906663038eb38381131ea27ecba610b1d816114a1565b610b25611743565b610b2d611694565b845f03610b66576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7287878787611d57565b6040517fc77b66c20000000000000000000000000000000000000000000000000000000081525f906001600160a01b0389169063c77b66c290610bc1908990309086908a908a90600401612e56565b6020604051808303815f875af1158015610bdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c019190612ea2565b9050858114610c4b576040517fbe40f1fc00000000000000000000000000000000000000000000000000000000815260048101879052602481018290526044015b60405180910390fd5b610c5f6001600160a01b03891688886116cb565b60408051878152863560208201526001600160a01b03808a1692908b169133917f7c0eac1a8d30fbe7a577affc3b588a0b7d965a6133d12097cfac0760f2f2b617910160405180910390a450610cb3611719565b50505050505050565b5f8073679ab223dab158ea93e1a4f49104de436c58eab8905073d7f91c1c6e6e651ec3f1fd707af7cbb7526206e16001600160a01b0316816001600160a01b0316632f77a1c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d539190612e3b565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db29190612e3b565b6001600160a01b0316148015610eab5750732df5cfe6d688ef9ff1b7c59a499d254b1527b2866001600160a01b0316816001600160a01b0316632c9b7f406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e419190612e3b565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea09190612e3b565b6001600160a01b0316145b91505090565b5f6060805f805f6060610ec2611e95565b610eca611f68565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b7f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de610f39816114a1565b610f41611694565b5f7f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be7006001600160a01b0385165f818152602083815260409182902080549088905582518181529182018890529394507fc6ce8282d3b57b159503fa5566e612aeb9f30c8e20c882398c9cb293c1ba6d68910160405180910390a25050610760611719565b5f805b86811015611025578481108015610ff657505f868683818110610fed57610fed612ee6565b90506020020135115b1561101d5761101d3389898481811061101157611011612ee6565b90506020020135611fb9565b600101610fc8565b507fbc197c81000000000000000000000000000000000000000000000000000000009998505050505050505050565b5f61105d612222565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156110895750825b90505f8267ffffffffffffffff1660011480156110a55750303b155b9050811580156110b3575080155b156110ea576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561114b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03861661118b576040517f9905827b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611193611743565b61119b61224a565b61120f6040518060400160405280601081526020017f535430784f7263686573747261746f72000000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250612252565b6112195f876114ae565b50831561127b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546112bc816114a1565b61070e838361157a565b7f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de6112f0816114a1565b6112f8611694565b6040517ff242432a0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038381166024830152604482018690526064820185905260a060848301525f60a483015286169063f242432a9060c4015f604051808303815f87803b158015611372575f80fd5b505af1158015611384573d5f803e3d5ffd5b5050505083826001600160a01b0316866001600160a01b03167f78b19b4b6e69e380c3c303d1e889d510ee3ee409219c1c014d97a0a607b6c6a686604051610ae391815260200190565b5f83156113df576113df3386611fb9565b507ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806106c557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146106c5565b6114ab8133612268565b50565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611571575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556115273390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506106c5565b5f9150506106c5565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611571575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506106c5565b604080517f8381bcc05e5203d9456aa7185a19b2be5d4af37909fecf63a6f2016c1bf8413360208201526001600160a01b038087169282019290925290841660608201526080810183905260a081018290525f906107729060c001604051602081830303815290604052805190602001206122f4565b61169c61233b565b6116c960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b90612394565b565b6116d8838383600161239b565b610760576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610c42565b6116c95f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f006116c3565b5f73679ab223dab158ea93e1a4f49104de436c58eab890505f816001600160a01b0316632f77a1c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611798573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117bc9190612e3b565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061181b9190612e3b565b90506001600160a01b03811673d7f91c1c6e6e651ec3f1fd707af7cbb7526206e114611898576040517fdfdb61b700000000000000000000000000000000000000000000000000000000815273d7f91c1c6e6e651ec3f1fd707af7cbb7526206e160048201526001600160a01b0382166024820152604401610c42565b5f826001600160a01b0316632c9b7f406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118f99190612e3b565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611934573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119589190612e3b565b90506001600160a01b038116732df5cfe6d688ef9ff1b7c59a499d254b1527b28614610760576040517f3e4077b3000000000000000000000000000000000000000000000000000000008152732df5cfe6d688ef9ff1b7c59a499d254b1527b28660048201526001600160a01b0382166024820152604401610c42565b6119e3848484846001612416565b61070e576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610c42565b5f808490505f816001600160a01b031663e1e6b8986040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a8a9190612e3b565b90507f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be7005f015f876001600160a01b03166001600160a01b031681526020019081526020015f205492505f826001600160a01b031663f5d214f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b10573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b349190612ea2565b90505b8515611d125780841115611b89576040517f66a21a2d0000000000000000000000000000000000000000000000000000000081526001600160a01b038816600482015260248101879052604401610c42565b6040517efdd58e000000000000000000000000000000000000000000000000000000008152306004820152602481018590525f906001600160a01b0384169062fdd58e90604401602060405180830381865afa158015611beb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c0f9190612ea2565b9050805f03611c245750600190930192611b37565b5f818810611c325781611c34565b875b90505f856001600160a01b031663921a4c428330308b8d6040518663ffffffff1660e01b8152600401611c6b959493929190612f13565b6020604051808303815f875af1158015611c87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cab9190612ea2565b9050818114611cf0576040517fbe40f1fc0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610c42565b611cfa828a612f55565b9850828203611d0a576001909601955b505050611b37565b5050506001600160a01b03939093165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be700602052604090208390555090919050565b6001600160a01b0383165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be70160209081526040808320843584529091529020547f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be7009060ff1615611e08576040517f59c210430000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015282356024820152604401610c42565b6001600160a01b0384165f90815260018281016020908152604080842086358086529252909220805460ff19169091179055610972908590611e4f9088908390889061161e565b611e5c6020860186612f8d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061249c92505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10091611ee690612fee565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1290612fee565b8015611f5d5780601f10611f3457610100808354040283529160200191611f5d565b820191905f5260205f20905b815481529060010190602001808311611f4057829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10380546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10091611ee690612fee565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f481c6a750000000000000000000000000000000000000000000000000000000017905290515f9182916001600160a01b038616916120299161303f565b5f60405180830381855afa9150503d805f8114612061576040519150601f19603f3d011682016040523d82523d5f602084013e612066565b606091505b509150915081158061207a57508051602014155b156120855750505050565b5f61208f82613055565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1e6b8980000000000000000000000000000000000000000000000000000000017905290519192506001600160a01b038316916120ff919061303f565b5f60405180830381855afa9150503d805f8114612137576040519150601f19603f3d011682016040523d82523d5f602084013e61213c565b606091505b50909350915082158061215157508151602014155b1561215d575050505050565b6001600160a01b03851661217083613055565b6001600160a01b031614612185575050505050565b6001600160a01b0381165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be700602081905260409091205480861015610cb3576001600160a01b0383165f818152602084815260409182902089905581518481529081018990527f2008c207f65bedc2bb65dc8ac34aee36a37cd43a50152d574107c63ace7e07c6910160405180910390a250505050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006106c5565b6116c96125cb565b61225a6125cb565b6122648282612609565b5050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16612264576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610c42565b5f6106c561230061266c565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c156116c9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825d5050565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f5114831661240a5783831516156123fe573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040517f23b872dd000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f5114831661248b57838315161561247f573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b8051156124e4576124ae83838361267a565b610760576040517f19ab93cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f642ddf3a0000000000000000000000000000000000000000000000000000000080825260048201849052906001600160a01b0385169063642ddf3a906024016020604051808303815f875af1158015612543573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125679190613078565b7fffffffff000000000000000000000000000000000000000000000000000000001614610760576040517f22b89c080000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610c42565b6125d36126ed565b6116c9576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126116125cb565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10261265d84826130d7565b506003810161070e83826130d7565b5f61267561270b565b905090565b5f836001600160a01b03163b5f036126d8575f80612698858561277e565b5090925090505f8160038111156126b1576126b1613193565b1480156126cf5750856001600160a01b0316826001600160a01b0316145b925050506126e6565b6126e38484846127c7565b90505b9392505050565b5f6126f6612222565b5468010000000000000000900460ff16919050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612735612831565b61273d612846565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f805f83516041036127b5576020840151604085015160608601515f1a6127a78882858561284f565b9550955095505050506127c0565b505081515f91506002905b9250925092565b8051604080517f1626ba7e000000000000000000000000000000000000000000000000000000008082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f61283a611e95565b80519060200120905090565b5f61283a611f68565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561288857505f9150600390508261290d565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156128d9573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661290457505f92506001915082905061290d565b92505f91508190505b9450945094915050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146114ab575f80fd5b5f60208284031215612954575f80fd5b81356126e681612917565b6001600160a01b03811681146114ab575f80fd5b5f8060408385031215612984575f80fd5b823561298f8161295f565b946020939093013593505050565b5f602082840312156129ad575f80fd5b5035919050565b5f80604083850312156129c5575f80fd5b8235915060208301356129d78161295f565b809150509250929050565b5f805f80608085870312156129f5575f80fd5b8435612a008161295f565b93506020850135612a108161295f565b93969395505050506040820135916060013590565b5f805f60608486031215612a37575f80fd5b8335612a428161295f565b9250602084013591506040840135612a598161295f565b809150509250925092565b5f8083601f840112612a74575f80fd5b50813567ffffffffffffffff811115612a8b575f80fd5b602083019150836020828501011115612aa2575f80fd5b9250929050565b5f805f8060608587031215612abc575f80fd5b8435612ac78161295f565b935060208501359250604085013567ffffffffffffffff811115612ae9575f80fd5b612af587828801612a64565b95989497509550505050565b5f805f8060808587031215612b14575f80fd5b8435612b1f8161295f565b935060208501359250604085013591506060850135612b3d8161295f565b939692955090935050565b5f805f805f8060a08789031215612b5d575f80fd5b8635612b688161295f565b95506020870135612b788161295f565b945060408701359350606087013567ffffffffffffffff80821115612b9b575f80fd5b908801906040828b031215612bae575f80fd5b90935060808801359080821115612bc3575f80fd5b50612bd089828a01612a64565b979a9699509497509295939492505050565b5f60208284031215612bf2575f80fd5b81356126e68161295f565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681525f602060e06020840152612c6760e084018a612bfd565b8381036040850152612c79818a612bfd565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b81811015612ccc57835183529284019291840191600101612cb0565b50909c9b505050505050505050505050565b5f8083601f840112612cee575f80fd5b50813567ffffffffffffffff811115612d05575f80fd5b6020830191508360208260051b8501011115612aa2575f80fd5b5f805f805f805f8060a0898b031215612d36575f80fd5b8835612d418161295f565b97506020890135612d518161295f565b9650604089013567ffffffffffffffff80821115612d6d575f80fd5b612d798c838d01612cde565b909850965060608b0135915080821115612d91575f80fd5b612d9d8c838d01612cde565b909650945060808b0135915080821115612db5575f80fd5b50612dc28b828c01612a64565b999c989b5096995094979396929594505050565b5f805f805f8060a08789031215612deb575f80fd5b8635612df68161295f565b95506020870135612e068161295f565b94506040870135935060608701359250608087013567ffffffffffffffff811115612e2f575f80fd5b612bd089828a01612a64565b5f60208284031215612e4b575f80fd5b81516126e68161295f565b8581526001600160a01b038516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f19160101949350505050565b5f60208284031215612eb2575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8581525f6001600160a01b03808716602084015280861660408401525083606083015260a06080830152612f4a60a0830184612bfd565b979650505050505050565b818103818111156106c5577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612fc0575f80fd5b83018035915067ffffffffffffffff821115612fda575f80fd5b602001915036819003821315612aa2575f80fd5b600181811c9082168061300257607f821691505b602082108103613039577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f82518060208501845e5f920191825250919050565b80516020808301519190811015613039575f1960209190910360031b1b16919050565b5f60208284031215613088575f80fd5b81516126e681612917565b601f82111561076057805f5260205f20601f840160051c810160208510156130b85750805b601f840160051c820191505b81811015610972575f81556001016130c4565b815167ffffffffffffffff8111156130f1576130f1612eb9565b613105816130ff8454612fee565b84613093565b602080601f831160018114613138575f84156131215750858301515b5f19600386901b1c1916600185901b17855561127b565b5f85815260208120601f198616915b8281101561316657888601518255948401946001909101908401613147565b508582101561318357878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd"; + hex"608060405260043610610191575f3560e01c8063742fabb3116100dc578063b930908f11610087578063d547741f11610062578063d547741f1461057c578063e9a9c8501461059b578063f14893a7146105ce578063f23a6e61146105ed575f80fd5b8063b930908f146104f2578063bc197c8114610525578063c4d66de81461055d575f80fd5b806391d14854116100b757806391d148541461045d5780639cb887f8146104c0578063a217fddf146104df575f80fd5b8063742fabb3146103cf578063752c9cf51461042257806384b0196e14610436575f80fd5b80633b94a0dd1161013c57806344d171871161011757806344d1718714610372578063584f418e14610391578063671d083f146103b0575f80fd5b80633b94a0dd146103015780633e81e40d146103345780633f6fc76f14610353575f80fd5b8063248a9ca31161016c578063248a9ca3146102745780632f2ff15d146102c157806336568abe146102e2575f80fd5b806301ffc9a71461019c5780630e230f97146101d057806320df435914610233575f80fd5b3661019857005b5f80fd5b3480156101a7575f80fd5b506101bb6101b6366004612870565b61060c565b60405190151581526020015b60405180910390f35b3480156101db575f80fd5b506101bb6101ea36600461289f565b6001600160a01b03919091165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be70160209081526040808320938352929052205460ff1690565b34801561023e575f80fd5b506102667f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de81565b6040519081526020016101c7565b34801561027f575f80fd5b5061026661028e3660046128c9565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b3480156102cc575f80fd5b506102e06102db3660046128e0565b610683565b005b3480156102ed575f80fd5b506102e06102fc3660046128e0565b6106cc565b34801561030c575f80fd5b506102667f8381bcc05e5203d9456aa7185a19b2be5d4af37909fecf63a6f2016c1bf8413381565b34801561033f575f80fd5b5061026661034e36600461290e565b61071d565b34801561035e575f80fd5b506102e061036d366004612951565b610733565b34801561037d575f80fd5b506102e061038c3660046129d5565b6107ce565b34801561039c575f80fd5b506102e06103ab366004612a2d565b610931565b3480156103bb575f80fd5b506102e06103ca366004612a74565b610aab565b3480156103da575f80fd5b506102666103e9366004612b0e565b6001600160a01b03165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be700602052604090205490565b34801561042d575f80fd5b506101bb610c74565b348015610441575f80fd5b5061044a610e69565b6040516101c79796959493929190612b57565b348015610468575f80fd5b506101bb6104773660046128e0565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104cb575f80fd5b506102e06104da36600461289f565b610ec7565b3480156104ea575f80fd5b506102665f81565b3480156104fd575f80fd5b506102667f04c6a47ae7910ef8b295215a97e8495a9eaf57b7b05bfd8bf951edb3fd4a16a381565b348015610530575f80fd5b5061054461053f366004612c4b565b610f7d565b6040516001600160e01b031990911681526020016101c7565b348015610568575f80fd5b506102e0610577366004612b0e565b61100c565b348015610587575f80fd5b506102e06105963660046128e0565b61120f565b3480156105a6575f80fd5b506102667ffdf81848136595c31bb5f76217767372bc4bf906663038eb38381131ea27ecba81565b3480156105d9575f80fd5b506102e06105e8366004612a2d565b611252565b3480156105f8575f80fd5b50610544610607366004612d02565b61135a565b5f6001600160e01b031982167f4e2312e000000000000000000000000000000000000000000000000000000000148061066e57506001600160e01b031982167f18bd37da00000000000000000000000000000000000000000000000000000000145b8061067d575061067d82611397565b92915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546106bc816113fd565b6106c6838361140a565b50505050565b6001600160a01b038116331461070e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61071882826114d6565b505050565b5f61072a8585858561157a565b95945050505050565b7f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de61075d816113fd565b6107656115f0565b6107796001600160a01b0385168385611627565b816001600160a01b0316846001600160a01b03167f4810d2f105dcba10d740b4ac1d8fa8454dd37014b2051bace1edb1d903c440c4856040516107be91815260200190565b60405180910390a36106c6611675565b7f04c6a47ae7910ef8b295215a97e8495a9eaf57b7b05bfd8bf951edb3fd4a16a36107f8816113fd565b61080061169f565b6108086115f0565b835f03610841576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108566001600160a01b038616333087611931565b6001600160a01b0385165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be70060209081526040808320548151601f870184900484028101840190925285825292916108cf91899189919089908990819084018382808284375f9201919091525061198092505050565b60408051888152602081018590529081018290529091506001600160a01b0388169033907f112766730ce440487945c01048dacfc6d04340403f675871e96c4e28cf622ecc9060600160405180910390a3505061092a611675565b5050505050565b7f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de61095b816113fd565b6109636115f0565b846001600160a01b031663e1e6b8986040518163ffffffff1660e01b8152600401602060405180830381865afa15801561099f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c39190612d67565b6040517ff242432a0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038481166024830152604482018790526064820186905260a060848301525f60a4830152919091169063f242432a9060c4015f604051808303815f87803b158015610a3f575f80fd5b505af1158015610a51573d5f803e3d5ffd5b5050505083826001600160a01b0316866001600160a01b03167fc9e640d2eb1b8469e42f60a66fef6a05cfd27ee3757e48f3f8ba04ecbc8a51b086604051610a9b91815260200190565b60405180910390a461092a611675565b7ffdf81848136595c31bb5f76217767372bc4bf906663038eb38381131ea27ecba610ad5816113fd565b610add61169f565b610ae56115f0565b845f03610b1e576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b2a87878787611cb3565b6040517fc77b66c20000000000000000000000000000000000000000000000000000000081525f906001600160a01b0389169063c77b66c290610b79908990309086908a908a90600401612d82565b6020604051808303815f875af1158015610b95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb99190612dce565b9050858114610c03576040517fbe40f1fc00000000000000000000000000000000000000000000000000000000815260048101879052602481018290526044015b60405180910390fd5b610c176001600160a01b0389168888611627565b60408051878152863560208201526001600160a01b03808a1692908b169133917f7c0eac1a8d30fbe7a577affc3b588a0b7d965a6133d12097cfac0760f2f2b617910160405180910390a450610c6b611675565b50505050505050565b5f807359afe8ae48de65d9916b99c8cf9977061955c9a790507352174538a83b18462c5cf898016539b086c920c76001600160a01b0316816001600160a01b0316632f77a1c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ce7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0b9190612d67565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d46573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6a9190612d67565b6001600160a01b0316148015610e63575073b092f127bd44f19bfa96e78db4beaf1066d2914e6001600160a01b0316816001600160a01b0316632c9b7f406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610df99190612d67565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e589190612d67565b6001600160a01b0316145b91505090565b5f6060805f805f6060610e7a611df1565b610e82611ec4565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b7f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de610ef1816113fd565b610ef96115f0565b5f7f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be7006001600160a01b0385165f818152602083815260409182902080549088905582518181529182018890529394507fc6ce8282d3b57b159503fa5566e612aeb9f30c8e20c882398c9cb293c1ba6d68910160405180910390a25050610718611675565b5f805b86811015610fdd578481108015610fae57505f868683818110610fa557610fa5612df9565b90506020020135115b15610fd557610fd533898984818110610fc957610fc9612df9565b90506020020135611f15565b600101610f80565b507fbc197c81000000000000000000000000000000000000000000000000000000009998505050505050505050565b5f61101561217e565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156110415750825b90505f8267ffffffffffffffff16600114801561105d5750303b155b90508115801561106b575080155b156110a2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156110ed57845468ff00000000000000001916680100000000000000001785555b6001600160a01b03861661112d576040517f9905827b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61113561169f565b61113d6121a6565b6111b16040518060400160405280601081526020017f535430784f7263686573747261746f72000000000000000000000000000000008152506040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506121ae565b6111bb5f8761140a565b50831561120757845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611248816113fd565b6106c683836114d6565b7f76b1a12ac8d9ed64de3c0f66c2a19b21c0a3f9a1afec3f75bcd45f7b0794a1de61127c816113fd565b6112846115f0565b6040517ff242432a0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038381166024830152604482018690526064820185905260a060848301525f60a483015286169063f242432a9060c4015f604051808303815f87803b1580156112fe575f80fd5b505af1158015611310573d5f803e3d5ffd5b5050505083826001600160a01b0316866001600160a01b03167f78b19b4b6e69e380c3c303d1e889d510ee3ee409219c1c014d97a0a607b6c6a686604051610a9b91815260200190565b5f831561136b5761136b3386611f15565b507ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b5f6001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061067d57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b031983161461067d565b61140781336121c4565b50565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166114cd575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556114833390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061067d565b5f91505061067d565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156114cd575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061067d565b604080517f8381bcc05e5203d9456aa7185a19b2be5d4af37909fecf63a6f2016c1bf8413360208201526001600160a01b038087169282019290925290841660608201526080810183905260a081018290525f9061072a9060c00160405160208183030381529060405280519060200120612250565b6115f8612297565b61162560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b906122f0565b565b61163483838360016122f7565b610718576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610bfa565b6116255f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0061161f565b5f7359afe8ae48de65d9916b99c8cf9977061955c9a790505f816001600160a01b0316632f77a1c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117189190612d67565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611753573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117779190612d67565b90506001600160a01b0381167352174538a83b18462c5cf898016539b086c920c7146117f4576040517fdfdb61b70000000000000000000000000000000000000000000000000000000081527352174538a83b18462c5cf898016539b086c920c760048201526001600160a01b0382166024820152604401610bfa565b5f826001600160a01b0316632c9b7f406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611831573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118559190612d67565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611890573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118b49190612d67565b90506001600160a01b03811673b092f127bd44f19bfa96e78db4beaf1066d2914e14610718576040517f3e4077b300000000000000000000000000000000000000000000000000000000815273b092f127bd44f19bfa96e78db4beaf1066d2914e60048201526001600160a01b0382166024820152604401610bfa565b61193f848484846001612372565b6106c6576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610bfa565b5f808490505f816001600160a01b031663e1e6b8986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119e69190612d67565b90507f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be7005f015f876001600160a01b03166001600160a01b031681526020019081526020015f205492505f826001600160a01b031663f5d214f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a909190612dce565b90505b8515611c6e5780841115611ae5576040517f66a21a2d0000000000000000000000000000000000000000000000000000000081526001600160a01b038816600482015260248101879052604401610bfa565b6040517efdd58e000000000000000000000000000000000000000000000000000000008152306004820152602481018590525f906001600160a01b0384169062fdd58e90604401602060405180830381865afa158015611b47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b6b9190612dce565b9050805f03611b805750600190930192611a93565b5f818810611b8e5781611b90565b875b90505f856001600160a01b031663921a4c428330308b8d6040518663ffffffff1660e01b8152600401611bc7959493929190612e0d565b6020604051808303815f875af1158015611be3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c079190612dce565b9050818114611c4c576040517fbe40f1fc0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610bfa565b611c56828a612e4f565b9850828203611c66576001909601955b505050611a93565b5050506001600160a01b03939093165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be700602052604090208390555090919050565b6001600160a01b0383165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be70160209081526040808320843584529091529020547f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be7009060ff1615611d64576040517f59c210430000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015282356024820152604401610bfa565b6001600160a01b0384165f90815260018281016020908152604080842086358086529252909220805460ff1916909117905561092a908590611dab9088908390889061157a565b611db86020860186612e6e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506123f892505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10091611e4290612ecf565b80601f0160208091040260200160405190810160405280929190818152602001828054611e6e90612ecf565b8015611eb95780601f10611e9057610100808354040283529160200191611eb9565b820191905f5260205f20905b815481529060010190602001808311611e9c57829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10380546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10091611e4290612ecf565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f481c6a750000000000000000000000000000000000000000000000000000000017905290515f9182916001600160a01b03861691611f8591612f07565b5f60405180830381855afa9150503d805f8114611fbd576040519150601f19603f3d011682016040523d82523d5f602084013e611fc2565b606091505b5091509150811580611fd657508051602014155b15611fe15750505050565b5f611feb82612f1d565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1e6b8980000000000000000000000000000000000000000000000000000000017905290519192506001600160a01b0383169161205b9190612f07565b5f60405180830381855afa9150503d805f8114612093576040519150601f19603f3d011682016040523d82523d5f602084013e612098565b606091505b5090935091508215806120ad57508151602014155b156120b9575050505050565b6001600160a01b0385166120cc83612f1d565b6001600160a01b0316146120e1575050505050565b6001600160a01b0381165f9081527f4bb94ceb743cdbfc320393e9b6fac11d883b2f90ac89bce731e459177c5be700602081905260409091205480861015610c6b576001600160a01b0383165f818152602084815260409182902089905581518481529081018990527f2008c207f65bedc2bb65dc8ac34aee36a37cd43a50152d574107c63ace7e07c6910160405180910390a250505050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061067d565b61162561250f565b6121b661250f565b6121c0828261254d565b5050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166121c0576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610bfa565b5f61067d61225c6125b0565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c15611625576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825d5050565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f5114831661236657838315161561235a573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b6040517f23b872dd000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f511483166123e75783831516156123db573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b8051156124405761240a8383836125be565b610718576040517f19ab93cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f642ddf3a0000000000000000000000000000000000000000000000000000000080825260048201849052906001600160a01b0385169063642ddf3a906024016020604051808303815f875af115801561249f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124c39190612f40565b6001600160e01b03191614610718576040517f22b89c080000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610bfa565b612517612631565b611625576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61255561250f565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026125a18482612f9f565b50600381016106c68382612f9f565b5f6125b961264f565b905090565b5f836001600160a01b03163b5f0361261c575f806125dc85856126c2565b5090925090505f8160038111156125f5576125f561305b565b1480156126135750856001600160a01b0316826001600160a01b0316145b9250505061262a565b61262784848461270b565b90505b9392505050565b5f61263a61217e565b5468010000000000000000900460ff16919050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612679612775565b61268161278a565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f805f83516041036126f9576020840151604085015160608601515f1a6126eb88828585612793565b955095509550505050612704565b505081515f91506002905b9250925092565b8051604080517f1626ba7e000000000000000000000000000000000000000000000000000000008082526004820186905260248201929092525f92906020820185604483015e60205f60648401838a5afa9050825f5114601f3d1116811693505050509392505050565b5f61277e611df1565b80519060200120905090565b5f61277e611ec4565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156127cc57505f91506003905082612851565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561281d573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661284857505f925060019150829050612851565b92505f91508190505b9450945094915050565b6001600160e01b031981168114611407575f80fd5b5f60208284031215612880575f80fd5b813561262a8161285b565b6001600160a01b0381168114611407575f80fd5b5f80604083850312156128b0575f80fd5b82356128bb8161288b565b946020939093013593505050565b5f602082840312156128d9575f80fd5b5035919050565b5f80604083850312156128f1575f80fd5b8235915060208301356129038161288b565b809150509250929050565b5f805f8060808587031215612921575f80fd5b843561292c8161288b565b9350602085013561293c8161288b565b93969395505050506040820135916060013590565b5f805f60608486031215612963575f80fd5b833561296e8161288b565b92506020840135915060408401356129858161288b565b809150509250925092565b5f8083601f8401126129a0575f80fd5b50813567ffffffffffffffff8111156129b7575f80fd5b6020830191508360208285010111156129ce575f80fd5b9250929050565b5f805f80606085870312156129e8575f80fd5b84356129f38161288b565b935060208501359250604085013567ffffffffffffffff811115612a15575f80fd5b612a2187828801612990565b95989497509550505050565b5f805f8060808587031215612a40575f80fd5b8435612a4b8161288b565b935060208501359250604085013591506060850135612a698161288b565b939692955090935050565b5f805f805f8060a08789031215612a89575f80fd5b8635612a948161288b565b95506020870135612aa48161288b565b945060408701359350606087013567ffffffffffffffff80821115612ac7575f80fd5b908801906040828b031215612ada575f80fd5b90935060808801359080821115612aef575f80fd5b50612afc89828a01612990565b979a9699509497509295939492505050565b5f60208284031215612b1e575f80fd5b813561262a8161288b565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681525f602060e06020840152612b9360e084018a612b29565b8381036040850152612ba5818a612b29565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b81811015612bf857835183529284019291840191600101612bdc565b50909c9b505050505050505050505050565b5f8083601f840112612c1a575f80fd5b50813567ffffffffffffffff811115612c31575f80fd5b6020830191508360208260051b85010111156129ce575f80fd5b5f805f805f805f8060a0898b031215612c62575f80fd5b8835612c6d8161288b565b97506020890135612c7d8161288b565b9650604089013567ffffffffffffffff80821115612c99575f80fd5b612ca58c838d01612c0a565b909850965060608b0135915080821115612cbd575f80fd5b612cc98c838d01612c0a565b909650945060808b0135915080821115612ce1575f80fd5b50612cee8b828c01612990565b999c989b5096995094979396929594505050565b5f805f805f8060a08789031215612d17575f80fd5b8635612d228161288b565b95506020870135612d328161288b565b94506040870135935060608701359250608087013567ffffffffffffffff811115612d5b575f80fd5b612afc89828a01612990565b5f60208284031215612d77575f80fd5b815161262a8161288b565b8581526001600160a01b038516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f19160101949350505050565b5f60208284031215612dde575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b8581525f6001600160a01b03808716602084015280861660408401525083606083015260a06080830152612e4460a0830184612b29565b979650505050505050565b8181038181111561067d57634e487b7160e01b5f52601160045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612ea1575f80fd5b83018035915067ffffffffffffffff821115612ebb575f80fd5b6020019150368190038213156129ce575f80fd5b600181811c90821680612ee357607f821691505b602082108103612f0157634e487b7160e01b5f52602260045260245ffd5b50919050565b5f82518060208501845e5f920191825250919050565b80516020808301519190811015612f01575f1960209190910360031b1b16919050565b5f60208284031215612f50575f80fd5b815161262a8161285b565b601f82111561071857805f5260205f20601f840160051c81016020851015612f805750805b601f840160051c820191505b8181101561092a575f8155600101612f8c565b815167ffffffffffffffff811115612fb957612fb9612de5565b612fcd81612fc78454612ecf565b84612f5b565b602080601f831160018114613000575f8415612fe95750858301515b5f19600386901b1c1916600185901b178555611207565b5f85815260208120601f198616915b8281101561302e5788860151825594840194600190910190840161300f565b508582101561304b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffd"; diff --git a/src/generated/candidate/ST0xOrchestratorBeaconSetDeployer.pointers.sol b/src/generated/candidate/ST0xOrchestratorBeaconSetDeployer.pointers.sol index 53ee4a14..64ce415e 100644 --- a/src/generated/candidate/ST0xOrchestratorBeaconSetDeployer.pointers.sol +++ b/src/generated/candidate/ST0xOrchestratorBeaconSetDeployer.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x2149474f3f4539b44296101ca3ffafb1ebd7f212b90b5fc9d8d28a4d010ca4eb); +bytes32 constant BYTECODE_HASH = bytes32(0x779b9e3b829a16736d5d29c81e925395da9ff76d7d94c3618d48bdf1bc438a60); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0xBff92564aeffe44C85A9153B9f2dB13e47A22435); +address constant DEPLOYED_ADDRESS = address(0x945D0Faf6f268e805246907507ef1044e70E75D7); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"60a0604052348015600e575f80fd5b507299fcb947cc31e21c631478a2a9e2e591cd4010738e4bdeec7ceb9570d440676345da1dce10329f5b6040516042906082565b6001600160a01b03928316815291166020820152604001604051809103905ff0801580156071573d5f803e3d5ffd5b506001600160a01b0316608052608f565b6104f7806109cf83390190565b6080516109226100ad5f395f81816070015261025201526109225ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806301ffc9a714610043578063429b15441461006b5780634c96a389146100b7575b5f80fd5b610056610051366004610309565b6100ca565b60405190151581526020015b60405180910390f35b6100927f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610062565b6100926100c536600461034f565b610162565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f4c96a38900000000000000000000000000000000000000000000000000000000148061015c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82166101b0576040517f9905827b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff831660248201525f90604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052519091505f907f000000000000000000000000000000000000000000000000000000000000000090839061027d906102fc565b610288929190610382565b604051809103905ff0801580156102a1573d5f803e3d5ffd5b5060405173ffffffffffffffffffffffffffffffffffffffff86811682529192509082169033907fa0d99d93cf7a5f89661fa0829369a7e4896e755871efe65440bab2429387d55b9060200160405180910390a39392505050565b61052f806103f383390190565b5f60208284031215610319575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610348575f80fd5b9392505050565b5f6020828403121561035f575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610348575f80fd5b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f82518060408401528060208501606085015e5f6060828501015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116840101915050939250505056fe60a060405260405161052f38038061052f83398101604081905261002291610331565b61002c828261003e565b506001600160a01b031660805261040d565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906103ed565b82610209565b505050565b6100f76102aa565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d291906103ed565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f61021684846102cb565b905080801561023757505f3d118061023757505f846001600160a01b03163b115b1561024c576102446102de565b9150506102a4565b801561027657604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b3d15610289576102846102f7565b6102a2565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156102c95760405163b398979f60e01b815260040160405180910390fd5b565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b80516001600160a01b0381168114610318575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610342575f80fd5b61034b83610302565b60208401519092506001600160401b0380821115610367575f80fd5b818501915085601f83011261037a575f80fd5b81518181111561038c5761038c61031d565b604051601f8201601f19908116603f011681019083821181831017156103b4576103b461031d565b816040528281528860208487010111156103cc575f80fd5b8260208601602083015e5f6020848301015280955050505050509250929050565b5f602082840312156103fd575f80fd5b61040682610302565b9392505050565b60805161010b6104245f395f6023015261010b5ff3fe608060405261000c61000e565b005b61001e610019610020565b6100b3565b565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ae91906100d1565b905090565b365f80375f80365f845af43d5f803e8080156100cd573d5ff35b3d5ffd5b5f602082840312156100e1575f80fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610104575f80fd5b939250505056608060405234801561000f575f80fd5b506040516104f73803806104f783398101604081905261002e9161015f565b806001600160a01b03811661005d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61006681610077565b50610070826100c6565b5050610190565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b5f036100fb5760405163211eb15960e21b81526001600160a01b0382166004820152602401610054565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b80516001600160a01b038116811461015a575f80fd5b919050565b5f8060408385031215610170575f80fd5b61017983610144565b915061018760208401610144565b90509250929050565b61035a8061019d5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063715018a61161004d578063715018a6146100c05780638da5cb5b146100c8578063f2fde38b146100e5575f80fd5b80633659cfe6146100685780635c60da1b1461007d575b5f80fd5b61007b610076366004610320565b6100f8565b005b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61007b61010c565b5f5473ffffffffffffffffffffffffffffffffffffffff16610097565b61007b6100f3366004610320565b61011f565b610100610184565b610109816101d6565b50565b610114610184565b61011d5f6102ac565b565b610127610184565b73ffffffffffffffffffffffffffffffffffffffff811661017b576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b610109816102ac565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461011d576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610172565b8073ffffffffffffffffffffffffffffffffffffffff163b5f0361023e576040517f847ac56400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610172565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610330575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610353575f80fd5b939250505056"; + hex"60a0604052348015600e575f80fd5b50731c3a4d12f88bd39303bb8510c6c1fa8ad37a4b72738e4bdeec7ceb9570d440676345da1dce10329f5b6040516043906083565b6001600160a01b03928316815291166020820152604001604051809103905ff0801580156072573d5f803e3d5ffd5b506001600160a01b03166080526090565b6104758061099483390190565b6080516108e66100ae5f395f81816070015261023401526108e65ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806301ffc9a714610043578063429b15441461006b5780634c96a389146100b7575b5f80fd5b6100566100513660046102eb565b6100ca565b60405190151581526020015b60405180910390f35b6100927f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610062565b6100926100c5366004610331565b610162565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f4c96a38900000000000000000000000000000000000000000000000000000000148061015c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82166101b0576040517f9905827b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff831660248201525f9060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052519091505f907f000000000000000000000000000000000000000000000000000000000000000090839061025f906102de565b61026a929190610364565b604051809103905ff080158015610283573d5f803e3d5ffd5b5060405173ffffffffffffffffffffffffffffffffffffffff86811682529192509082169033907fa0d99d93cf7a5f89661fa0829369a7e4896e755871efe65440bab2429387d55b9060200160405180910390a39392505050565b61052f806103b783390190565b5f602082840312156102fb575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461032a575f80fd5b9392505050565b5f60208284031215610341575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461032a575f80fd5b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f830116840101915050939250505056fe60a060405260405161052f38038061052f83398101604081905261002291610331565b61002c828261003e565b506001600160a01b031660805261040d565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906103ed565b82610209565b505050565b6100f76102aa565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d291906103ed565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f61021684846102cb565b905080801561023757505f3d118061023757505f846001600160a01b03163b115b1561024c576102446102de565b9150506102a4565b801561027657604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b3d15610289576102846102f7565b6102a2565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156102c95760405163b398979f60e01b815260040160405180910390fd5b565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b80516001600160a01b0381168114610318575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610342575f80fd5b61034b83610302565b60208401519092506001600160401b0380821115610367575f80fd5b818501915085601f83011261037a575f80fd5b81518181111561038c5761038c61031d565b604051601f8201601f19908116603f011681019083821181831017156103b4576103b461031d565b816040528281528860208487010111156103cc575f80fd5b8260208601602083015e5f6020848301015280955050505050509250929050565b5f602082840312156103fd575f80fd5b61040682610302565b9392505050565b60805161010b6104245f395f6023015261010b5ff3fe608060405261000c61000e565b005b61001e610019610020565b6100b3565b565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ae91906100d1565b905090565b365f80375f80365f845af43d5f803e8080156100cd573d5ff35b3d5ffd5b5f602082840312156100e1575f80fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610104575f80fd5b939250505056608060405234801561000f575f80fd5b5060405161047538038061047583398101604081905261002e9161015f565b806001600160a01b03811661005d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61006681610077565b50610070826100c6565b5050610190565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b5f036100fb5760405163211eb15960e21b81526001600160a01b0382166004820152602401610054565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b80516001600160a01b038116811461015a575f80fd5b919050565b5f8060408385031215610170575f80fd5b61017983610144565b915061018760208401610144565b90509250929050565b6102d88061019d5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063715018a61161004d578063715018a6146100a65780638da5cb5b146100ae578063f2fde38b146100be575f80fd5b80633659cfe6146100685780635c60da1b1461007d575b5f80fd5b61007b6100763660046102ab565b6100d1565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61007b6100e5565b5f546001600160a01b031661008a565b61007b6100cc3660046102ab565b6100f8565b6100d9610150565b6100e281610195565b50565b6100ed610150565b6100f65f610244565b565b610100610150565b6001600160a01b038116610147576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b6100e281610244565b5f546001600160a01b031633146100f6576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161013e565b806001600160a01b03163b5f036101e3576040517f847ac5640000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161013e565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156102bb575f80fd5b81356001600160a01b03811681146102d1575f80fd5b939250505056"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b506004361061003f575f3560e01c806301ffc9a714610043578063429b15441461006b5780634c96a389146100b7575b5f80fd5b610056610051366004610309565b6100ca565b60405190151581526020015b60405180910390f35b6100927f000000000000000000000000ba0d89f6e84a201cd2c720a91911fdadbbb2ad4881565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610062565b6100926100c536600461034f565b610162565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f4c96a38900000000000000000000000000000000000000000000000000000000148061015c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82166101b0576040517f9905827b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff831660248201525f90604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052519091505f907f000000000000000000000000ba0d89f6e84a201cd2c720a91911fdadbbb2ad4890839061027d906102fc565b610288929190610382565b604051809103905ff0801580156102a1573d5f803e3d5ffd5b5060405173ffffffffffffffffffffffffffffffffffffffff86811682529192509082169033907fa0d99d93cf7a5f89661fa0829369a7e4896e755871efe65440bab2429387d55b9060200160405180910390a39392505050565b61052f806103f383390190565b5f60208284031215610319575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610348575f80fd5b9392505050565b5f6020828403121561035f575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610348575f80fd5b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f82518060408401528060208501606085015e5f6060828501015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116840101915050939250505056fe60a060405260405161052f38038061052f83398101604081905261002291610331565b61002c828261003e565b506001600160a01b031660805261040d565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906103ed565b82610209565b505050565b6100f76102aa565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d291906103ed565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f61021684846102cb565b905080801561023757505f3d118061023757505f846001600160a01b03163b115b1561024c576102446102de565b9150506102a4565b801561027657604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b3d15610289576102846102f7565b6102a2565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156102c95760405163b398979f60e01b815260040160405180910390fd5b565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b80516001600160a01b0381168114610318575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610342575f80fd5b61034b83610302565b60208401519092506001600160401b0380821115610367575f80fd5b818501915085601f83011261037a575f80fd5b81518181111561038c5761038c61031d565b604051601f8201601f19908116603f011681019083821181831017156103b4576103b461031d565b816040528281528860208487010111156103cc575f80fd5b8260208601602083015e5f6020848301015280955050505050509250929050565b5f602082840312156103fd575f80fd5b61040682610302565b9392505050565b60805161010b6104245f395f6023015261010b5ff3fe608060405261000c61000e565b005b61001e610019610020565b6100b3565b565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ae91906100d1565b905090565b365f80375f80365f845af43d5f803e8080156100cd573d5ff35b3d5ffd5b5f602082840312156100e1575f80fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610104575f80fd5b939250505056"; + hex"608060405234801561000f575f80fd5b506004361061003f575f3560e01c806301ffc9a714610043578063429b15441461006b5780634c96a389146100b7575b5f80fd5b6100566100513660046102eb565b6100ca565b60405190151581526020015b60405180910390f35b6100927f000000000000000000000000b9dcd744b0413dff0edc70a5b229c7aa0373461381565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610062565b6100926100c5366004610331565b610162565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f4c96a38900000000000000000000000000000000000000000000000000000000148061015c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82166101b0576040517f9905827b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff831660248201525f9060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052519091505f907f000000000000000000000000b9dcd744b0413dff0edc70a5b229c7aa0373461390839061025f906102de565b61026a929190610364565b604051809103905ff080158015610283573d5f803e3d5ffd5b5060405173ffffffffffffffffffffffffffffffffffffffff86811682529192509082169033907fa0d99d93cf7a5f89661fa0829369a7e4896e755871efe65440bab2429387d55b9060200160405180910390a39392505050565b61052f806103b783390190565b5f602082840312156102fb575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461032a575f80fd5b9392505050565b5f60208284031215610341575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461032a575f80fd5b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f830116840101915050939250505056fe60a060405260405161052f38038061052f83398101604081905261002291610331565b61002c828261003e565b506001600160a01b031660805261040d565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906103ed565b82610209565b505050565b6100f76102aa565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d291906103ed565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f61021684846102cb565b905080801561023757505f3d118061023757505f846001600160a01b03163b115b1561024c576102446102de565b9150506102a4565b801561027657604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b3d15610289576102846102f7565b6102a2565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156102c95760405163b398979f60e01b815260040160405180910390fd5b565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b80516001600160a01b0381168114610318575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610342575f80fd5b61034b83610302565b60208401519092506001600160401b0380821115610367575f80fd5b818501915085601f83011261037a575f80fd5b81518181111561038c5761038c61031d565b604051601f8201601f19908116603f011681019083821181831017156103b4576103b461031d565b816040528281528860208487010111156103cc575f80fd5b8260208601602083015e5f6020848301015280955050505050509250929050565b5f602082840312156103fd575f80fd5b61040682610302565b9392505050565b60805161010b6104245f395f6023015261010b5ff3fe608060405261000c61000e565b005b61001e610019610020565b6100b3565b565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ae91906100d1565b905090565b365f80375f80365f845af43d5f803e8080156100cd573d5ff35b3d5ffd5b5f602082840312156100e1575f80fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610104575f80fd5b939250505056"; diff --git a/src/generated/candidate/StoxCorporateActionsFacet.pointers.sol b/src/generated/candidate/StoxCorporateActionsFacet.pointers.sol index aef0d95d..49171b4a 100644 --- a/src/generated/candidate/StoxCorporateActionsFacet.pointers.sol +++ b/src/generated/candidate/StoxCorporateActionsFacet.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0xd91520075de1eb2e8fdf042fde3475ee89feb3942306e5d6d5c710273fefc080); +bytes32 constant BYTECODE_HASH = bytes32(0x870162e771dac7e0dfe7226bad633055130d1e28128bcfb8afe7fee1097eb055); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0xB7e24412126ad6A2Ce19cbd79FD11B68e7F30cf6); +address constant DEPLOYED_ADDRESS = address(0xad6219d71cCF6904C0633e3a8a8C423F54036fd1); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"60a0604052348015600e575f80fd5b503060805260805161268d6100635f395f81816101970152818161031b0152818161038901528181610466015281816104c90152818161053b0152818161070301528181610767015261089e015261268d5ff3fe608060405234801561000f575f80fd5b506004361061009f575f3560e01c806379ba430511610072578063bb7bb45a11610058578063bb7bb45a14610151578063dad601be14610159578063e388df491461016c575f80fd5b806379ba43051461011e578063b21a249414610131575f80fd5b80630d1e0432146100a35780631cb5642f146100be578063358116b9146100f65780634e6c280e1461010b575b5f80fd5b6100ab61017f565b6040519081526020015b60405180910390f35b6100d16100cc366004612126565b610301565b60408051938452602084019290925267ffffffffffffffff16908201526060016100b5565b610109610104366004612150565b610372565b005b6100d1610119366004612126565b61044c565b6100d161012c366004612167565b6104af565b61014461013f366004612150565b610522565b6040516100b591906121c7565b6100ab6106eb565b6100ab6101673660046121d9565b61074f565b6100d161017a366004612167565b610884565b5f73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036101d6576040516309e815f560e01b815260040160405180910390fd5b5f6101df6108e8565b905060015f6101f15f19600384610967565b90505b5f1981146102fa57600283600201828154811061021357610213612261565b905f5260205f2090600502015f0154036102e6576102e3826102de85600201848154811061024357610243612261565b905f5260205f209060050201600401805461025d90612275565b80601f016020809104026020016040519081016040528092919081815260200182805461028990612275565b80156102d45780601f106102ab576101008083540402835291602001916102d4565b820191905f5260205f20905b8154815290600101906020018083116102b757829003601f168201915b5050505050610a6e565b610a89565b91505b6102f38160036001610967565b90506101f4565b5091505090565b5f808073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016300361035a576040516309e815f560e01b815260040160405180910390fd5b6103648585610aeb565b9250925092505b9250925092565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036103c8576040516309e815f560e01b815260040160405180910390fd5b610414337f921a3c774c4abecc1bddc4f7beb397fdb2cde7806021d9571086abb74cd023e78360405160200161040091815260200190565b604051602081830303815290604052610b19565b61041d81610c13565b604051819033907f94041431cee1a4c20be97117d396e73eb1e601e124b48fbc5dc07397c31d5f8a905f90a350565b5f808073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036104a5576040516309e815f560e01b815260040160405180910390fd5b6103648585610df0565b5f808073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610508576040516309e815f560e01b815260040160405180910390fd5b610513868686610e00565b92509250925093509350939050565b606073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016300361057a576040516309e815f560e01b815260040160405180910390fd5b5f6105836108e8565b600281015490915083106105cb576040517f029c6c35000000000000000000000000000000000000000000000000000000008152600481018490526024015b60405180910390fd5b8060020183815481106105e0576105e0612261565b5f918252602082206001600590920201015467ffffffffffffffff169003610637576040517f029c6c35000000000000000000000000000000000000000000000000000000008152600481018490526024016105c2565b80600201838154811061064c5761064c612261565b905f5260205f209060050201600401805461066690612275565b80601f016020809104026020016040519081016040528092919081815260200182805461069290612275565b80156106dd5780601f106106b4576101008083540402835291602001916106dd565b820191905f5260205f20905b8154815290600101906020018083116106c057829003601f168201915b50505050509150505b919050565b5f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610742576040516309e815f560e01b815260040160405180910390fd5b61074a610e2e565b905090565b5f73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036107a6576040516309e815f560e01b815260040160405180910390fd5b6107e2337ffc0b9a47b723baf66339577301d13949cab2da29c3baeaa9cfc1f36c513e8f898787878760405160200161040094939291906122a7565b5f6107ee868585610e82565b90505f610831828787878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610f2d92505050565b6040805184815267ffffffffffffffff89166020820152919250829133917fa9c7784142e419f4660627c0c145b3873c2a415ce062f5c81bc19e6850f873d8910160405180910390a39695505050505050565b5f808073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036108dd576040516309e815f560e01b815260040160405180910390fd5b610513868686611047565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0061093660017f2f8f8ecf1b7a1a3ceda8d15a9a2247a2377b3434535a87f1728021c13fec2e71612301565b60405160200161094891815260200190565b60408051601f1981840301815291905280516020909101201692915050565b5f6007831681036109a4576040517fbf3cad0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6109ad6108e8565b60028101549091505f036109c5575f19915050610a67565b5f5f1986146109f8578160020186815481106109e3576109e3612261565b905f5260205f209060050201600301546109fb565b81545b90506002846002811115610a1157610a11612314565b03610a3357610a2a82610a248484611056565b876110d1565b92505050610a67565b6001846002811115610a4757610a47612314565b03610a5757610a2a828287611129565b610a628282876110d1565b925050505b9392505050565b5f81806020019051810190610a839190612328565b92915050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610ace86868686611196565b915091505f610add83836112b5565b9a9950505050505050505050565b5f805f80610afb5f19878761131b565b90505f80610b0883611410565b939650945091925050509250925092565b5f3073ffffffffffffffffffffffffffffffffffffffff1663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b87919061233f565b6040517f59f89dda00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906359f89dda90610be090879087908790600401612372565b5f604051808303815f87803b158015610bf7575f80fd5b505af1158015610c09573d5f803e3d5ffd5b5050505050505050565b5f610c1c6108e8565b60028101549091508210610c5f576040517f029c6c35000000000000000000000000000000000000000000000000000000008152600481018390526024016105c2565b5f816002018381548110610c7557610c75612261565b5f9182526020822060016005909202019081015490925067ffffffffffffffff169003610cd1576040517f029c6c35000000000000000000000000000000000000000000000000000000008152600481018490526024016105c2565b60018101544267ffffffffffffffff90911611610d1d576040517f99fa8c69000000000000000000000000000000000000000000000000000000008152600481018490526024016105c2565b600281015460038201545f198214610d5d5780846002018381548110610d4557610d45612261565b905f5260205f20906005020160030181905550610d61565b8084555b5f198114610d975781846002018281548110610d7f57610d7f612261565b905f5260205f20906005020160020181905550610d9f565b600184018290555b5f196002840181905560038401556001830180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001690555f808455610de99060048501906120ca565b5050505050565b5f805f80610afb5f198787610967565b5f805f80610e0f878787610967565b90505f80610e1c83611410565b939a9099509297509195505050505050565b5f610e376108e8565b600201545f03610e4657505f90565b60065f80610e575f19846001610967565b90505b5f1981146102fa5781610e6c816123a6565b925050610e7b81846001610967565b9050610e5a565b5f7f4548e57ae2f1604df75a3d17fecaff7dd11ad7a93d9f8a0dc05e7144f46f3f7c8403610ef857610ef0610eeb84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610a6e92505050565b61146e565b506002610a67565b6040517ff17c1d46000000000000000000000000000000000000000000000000000000008152600481018590526024016105c2565b5f428367ffffffffffffffff1611610f83576040517fc0851c8a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201524260248201526044016105c2565b5f610f8c6108e8565b9050610f978161156e565b60028101805460019081018083555f928352610fb39190612301565b90505f826002018281548110610fcb57610fcb612261565b5f91825260209091206005909102018781556001810180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8916179055905060048101611023868261241b565b505f1960028201819055600382015561103d838388611617565b5095945050505050565b5f805f80610e0f87878761131b565b5f5b5f19821415801561109a57504283600201838154811061107a5761107a612261565b5f91825260209091206001600590920201015467ffffffffffffffff1611155b156110cb578260020182815481106110b4576110b4612261565b905f5260205f209060050201600301549150611058565b50919050565b5f5b5f19831461111f575f8460020184815481106110f1576110f1612261565b905f5260205f209060050201905082815f0154165f146111145783915050610a67565b6003015492506110d3565b505f199392505050565b5f5b5f19831461111f575f84600201848154811061114957611149612261565b5f918252602090912060059091020160018101549091504267ffffffffffffffff9091161115611179575061111f565b805483161561118b5783915050610a67565b60030154925061112b565b5f80851584151780156111ae575f92505f91506112ab565b6111b884876124d7565b91505f6111c488611761565b90505f6111d087611761565b90505f6111dd83836117c2565b5090505f6f0785ee10d5da46d900f436a000000000821115611212576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a764000082111561123357670de0b6b3a7640000820491506012015b633b9aca0082111561124c57633b9aca00820491506009015b61271082111561126157612710820491506004015b811561127557600a82049150600101611261565b61127f81876124d7565b95506112a18b8a61129b878761129687600a6125f2565b6117de565b896118c3565b9097509550505050505b5094509492505050565b5f805f6112c285856119cf565b91509150801580156112d2575081155b15611313576040517f8eba4d0700000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016105c2565b509392505050565b5f600783168103611358576040517fbf3cad0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6113616108e8565b60028101549091505f03611379575f19915050610a67565b5f5f1986146113ac5781600201868154811061139757611397612261565b905f5260205f209060050201600201546113b2565b81600101545b905060018460028111156113c8576113c8612314565b036113e157610a2a826113db8484611ad6565b87611b4a565b60028460028111156113f5576113f5612314565b0361140557610a2a828287611b98565b610a62828287611b4a565b5f805f19830361142457505f928392509050565b5f61142d6108e8565b600201848154811061144157611441612261565b5f91825260209091206005909102018054600190910154909567ffffffffffffffff909116945092505050565b611478815f611c04565b156114af576040517f018d151200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6114b930611c54565b90505f6114c7600183611cfe565b90506114d38382611d22565b1561150d576040517f06c32712000000000000000000000000000000000000000000000000000000008152600481018490526024016105c2565b5f61152261151c84600a6125fd565b5f611cfe565b905061152e8482611d71565b15611568576040517fd24a8af1000000000000000000000000000000000000000000000000000000008152600481018590526024016105c2565b50505050565b60028101541561157b5750565b6002810180546001018082555f8281529190829061159b5761159b612261565b5f9182526020909120600160059092020181815590810180547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555f1960028201819055600382015590506115fc611dc0565b5f808052600484016020526040902055505f19600590910155565b5f83600201838154811061162d5761162d612261565b905f5260205f20906005020190505f846001015490505b5f198114610de9578267ffffffffffffffff1685600201828154811061166c5761166c612261565b5f91825260209091206001600590920201015467ffffffffffffffff1611611735575f8560020182815481106116a4576116a4612261565b905f5260205f209060050201600301549050848660020183815481106116cc576116cc612261565b5f918252602090912060036005909202018101919091556002840183905583018190555f198114611725578486600201828154811061170d5761170d612261565b905f5260205f2090600502016002018190555061172d565b600186018590555b505050505050565b84600201818154811061174a5761174a612261565b905f5260205f209060050201600201549050611644565b5f808212156117be577f800000000000000000000000000000000000000000000000000000000000000082036117b857507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b5f805f1983850993909202808410938190039390930393915050565b5f805f6117eb86866117c2565b91509150815f0361180f57838181611805576118056124fe565b0492505050610a67565b838210611859576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016105c2565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561198d577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84111561197a576119227f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600161260b565b840361195257507f80000000000000000000000000000000000000000000000000000000000000009050816119c6565b61195d600a8561261e565b6119669061263d565b6119718460016124d7565b915091506119c6565b6119838461263d565b83915091506119c6565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8411156119c057611966600a8561261e565b50829050815b94509492505050565b5f601b83900b8314838382611a33577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515611a1357620186a0860595506005850194505b8586601b0b14611a2e57600a86059550846001019450611a13565b611a49565b855f03611a4957505f925060019150611acf9050565b848560030b14611aa5575f851215611a6957505f9250829150611acf9050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105c2565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791505b9250929050565b5f5b5f198214158015611b19575042836002018381548110611afa57611afa612261565b5f91825260209091206001600590920201015467ffffffffffffffff16115b156110cb57826002018281548110611b3357611b33612261565b905f5260205f209060050201600201549150611ad8565b5f5b5f19831461111f575f846002018481548110611b6a57611b6a612261565b905f5260205f209060050201905082815f0154165f14611b8d5783915050610a67565b600201549250611b4c565b5f5b5f19831461111f575f846002018481548110611bb857611bb8612261565b5f918252602090912060059091020160018101549091504267ffffffffffffffff90911611611be7575061111f565b8054831615611bf95783915050610a67565b600201549250611b9a565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611c4784848484611e43565b1215979650505050505050565b5f611c5d611f17565b6040517f54636d2b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af1158015611cda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a83919061266d565b5f805f611d0b8585611fbd565b91509150611d19828261201f565b95945050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611d6584848484611e43565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611db484848484611e43565b12979650505050505050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00611e0e60017fb750591399365444a618527b69a54ce09476c8bde1ecff60f5aa1fe2b52605ff612301565b604051602001611e2091815260200190565b60408051808303601f190181529190528051602090910120166002015492915050565b5f8085158415178187128286121817858414178015611e6857868592509250506119c6565b505f85841315611e7c575092949193919260015b8386035f8112604c8213178015611eaf578215611ea1575f89945094505050506119c6565b885f945094505050506119c6565b600a82900a8981028a828281611ec757611ec76124fe565b0514611ef3578415611ee3575f8b9650965050505050506119c6565b8a5f9650965050505050506119c6565b8415611f085788965094506119c69350505050565b95508794506119c69350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580611f6e575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15611fbb576040517f73e6d7b300000000000000000000000000000000000000000000000000000000815273200e12d10bb0c5e4a17e7018f0f1161919bb938960048201526024016105c2565b565b5f805f805f611fcc8787612071565b92509250925080612013576040517fc471796600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016105c2565b50909590945092505050565b5f805f61202c85856119cf565b9150915080611313576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016105c2565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8611156120bc57600a860460018201600a88065f149350935093505061036b565b85935091506001905061036b565b5080546120d690612275565b5f825580601f106120e5575050565b601f0160209004905f5260205f20908101906121019190612104565b50565b5b808211156117be575f8155600101612105565b8035600381106106e6575f80fd5b5f8060408385031215612137575f80fd5b8235915061214760208401612118565b90509250929050565b5f60208284031215612160575f80fd5b5035919050565b5f805f60608486031215612179575f80fd5b833592506020840135915061219060408501612118565b90509250925092565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610a676020830184612199565b5f805f80606085870312156121ec575f80fd5b84359350602085013567ffffffffffffffff808216821461220b575f80fd5b90935060408601359080821115612220575f80fd5b818701915087601f830112612233575f80fd5b813581811115612241575f80fd5b886020828501011115612252575f80fd5b95989497505060200194505050565b634e487b7160e01b5f52603260045260245ffd5b600181811c9082168061228957607f821691505b6020821081036110cb57634e487b7160e01b5f52602260045260245ffd5b84815267ffffffffffffffff8416602082015260606040820152816060820152818360808301375f818301608090810191909152601f909201601f191601019392505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610a8357610a836122ed565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215612338575f80fd5b5051919050565b5f6020828403121561234f575f80fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610a67575f80fd5b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201525f611d196060830184612199565b5f5f1982036123b7576123b76122ed565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b601f82111561241657805f5260205f20601f840160051c810160208510156123f75750805b601f840160051c820191505b81811015610de9575f8155600101612403565b505050565b815167ffffffffffffffff811115612435576124356123be565b612449816124438454612275565b846123d2565b602080601f83116001811461247c575f84156124655750858301515b5f19600386901b1c1916600185901b17855561172d565b5f85815260208120601f198616915b828110156124aa5788860151825594840194600190910190840161248b565b50858210156124c757878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8082018281125f8312801582168215821617156124f6576124f66122ed565b505092915050565b634e487b7160e01b5f52601260045260245ffd5b600181815b8085111561254c57815f1904821115612532576125326122ed565b8085161561253f57918102915b93841c9390800290612517565b509250929050565b5f8261256257506001610a83565b8161256e57505f610a83565b8160018114612584576002811461258e576125aa565b6001915050610a83565b60ff84111561259f5761259f6122ed565b50506001821b610a83565b5060208310610133831016604e8410600b84101617156125cd575081810a610a83565b6125d78383612512565b805f19048211156125ea576125ea6122ed565b029392505050565b5f610a678383612554565b5f610a6760ff841683612554565b80820180821115610a8357610a836122ed565b5f8261263857634e487b7160e01b5f52601260045260245ffd5b500490565b5f7f800000000000000000000000000000000000000000000000000000000000000082036117b8576117b86122ed565b5f6020828403121561267d575f80fd5b815160ff81168114610a67575f80fd"; + hex"60a0604052348015600e575f80fd5b503060805260805161248a6100635f395f818161018a01528181610301015281816103620152818161043201528181610488015281816104ed01528181610676015281816106cd01526107f7015261248a5ff3fe608060405234801561000f575f80fd5b506004361061009f575f3560e01c806379ba430511610072578063bb7bb45a11610058578063bb7bb45a14610151578063dad601be14610159578063e388df491461016c575f80fd5b806379ba43051461011e578063b21a249414610131575f80fd5b80630d1e0432146100a35780631cb5642f146100be578063358116b9146100f65780634e6c280e1461010b575b5f80fd5b6100ab61017f565b6040519081526020015b60405180910390f35b6100d16100cc366004611f59565b6102f4565b60408051938452602084019290925267ffffffffffffffff16908201526060016100b5565b610109610104366004611f83565b610358565b005b6100d1610119366004611f59565b610425565b6100d161012c366004611f9a565b61047b565b61014461013f366004611f83565b6104e1565b6040516100b59190611ffa565b6100ab61066b565b6100ab61016736600461200c565b6106c2565b6100d161017a366004611f9a565b6107ea565b5f6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036101c9576040516309e815f560e01b815260040160405180910390fd5b5f6101d2610841565b905060015f6101e45f196003846108a2565b90505b5f1981146102ed57600283600201828154811061020657610206612094565b905f5260205f2090600502015f0154036102d9576102d6826102d185600201848154811061023657610236612094565b905f5260205f2090600502016004018054610250906120a8565b80601f016020809104026020016040519081016040528092919081815260200182805461027c906120a8565b80156102c75780601f1061029e576101008083540402835291602001916102c7565b820191905f5260205f20905b8154815290600101906020018083116102aa57829003601f168201915b50505050506109a9565b6109c4565b91505b6102e681600360016108a2565b90506101e7565b5091505090565b5f80806001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610340576040516309e815f560e01b815260040160405180910390fd5b61034a8585610a26565b9250925092505b9250925092565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036103a1576040516309e815f560e01b815260040160405180910390fd5b6103ed337f921a3c774c4abecc1bddc4f7beb397fdb2cde7806021d9571086abb74cd023e7836040516020016103d991815260200190565b604051602081830303815290604052610a54565b6103f681610b34565b604051819033907f94041431cee1a4c20be97117d396e73eb1e601e124b48fbc5dc07397c31d5f8a905f90a350565b5f80806001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610471576040516309e815f560e01b815260040160405180910390fd5b61034a8585610cc8565b5f80806001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036104c7576040516309e815f560e01b815260040160405180910390fd5b6104d2868686610cd8565b92509250925093509350939050565b60606001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361052c576040516309e815f560e01b815260040160405180910390fd5b5f610535610841565b600281015490915083106105645760405163029c6c3560e01b8152600481018490526024015b60405180910390fd5b80600201838154811061057957610579612094565b5f918252602082206001600590920201015467ffffffffffffffff1690036105b75760405163029c6c3560e01b81526004810184905260240161055b565b8060020183815481106105cc576105cc612094565b905f5260205f20906005020160040180546105e6906120a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610612906120a8565b801561065d5780601f106106345761010080835404028352916020019161065d565b820191905f5260205f20905b81548152906001019060200180831161064057829003601f168201915b50505050509150505b919050565b5f6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106b5576040516309e815f560e01b815260040160405180910390fd5b6106bd610d06565b905090565b5f6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361070c576040516309e815f560e01b815260040160405180910390fd5b610748337ffc0b9a47b723baf66339577301d13949cab2da29c3baeaa9cfc1f36c513e8f89878787876040516020016103d994939291906120da565b5f610754868585610d5a565b90505f610797828787878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610e0592505050565b6040805184815267ffffffffffffffff89166020820152919250829133917fa9c7784142e419f4660627c0c145b3873c2a415ce062f5c81bc19e6850f873d8910160405180910390a39695505050505050565b5f80806001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610836576040516309e815f560e01b815260040160405180910390fd5b6104d2868686610f08565b5f8060ff1961087160017f2f8f8ecf1b7a1a3ceda8d15a9a2247a2377b3434535a87f1728021c13fec2e71612134565b60405160200161088391815260200190565b60408051601f1981840301815291905280516020909101201692915050565b5f6007831681036108df576040517fbf3cad0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6108e8610841565b60028101549091505f03610900575f199150506109a2565b5f5f1986146109335781600201868154811061091e5761091e612094565b905f5260205f20906005020160030154610936565b81545b9050600284600281111561094c5761094c612147565b0361096e576109658261095f8484610f17565b87610f92565b925050506109a2565b600184600281111561098257610982612147565b0361099257610965828287610fea565b61099d828287610f92565b925050505b9392505050565b5f818060200190518101906109be919061215b565b92915050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610a0986868686611057565b915091505f610a188383611176565b9a9950505050505050505050565b5f805f80610a365f1987876111dc565b90505f80610a43836112d1565b939650945091925050509250925092565b5f306001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a91573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab59190612172565b6040517f59f89dda0000000000000000000000000000000000000000000000000000000081529091506001600160a01b038216906359f89dda90610b0190879087908790600401612198565b5f604051808303815f87803b158015610b18575f80fd5b505af1158015610b2a573d5f803e3d5ffd5b5050505050505050565b5f610b3d610841565b60028101549091508210610b675760405163029c6c3560e01b81526004810183905260240161055b565b5f816002018381548110610b7d57610b7d612094565b5f9182526020822060016005909202019081015490925067ffffffffffffffff169003610bc05760405163029c6c3560e01b81526004810184905260240161055b565b60018101544267ffffffffffffffff90911611610c0c576040517f99fa8c690000000000000000000000000000000000000000000000000000000081526004810184905260240161055b565b600281015460038201545f198214610c4c5780846002018381548110610c3457610c34612094565b905f5260205f20906005020160030181905550610c50565b8084555b5f198114610c865781846002018281548110610c6e57610c6e612094565b905f5260205f20906005020160020181905550610c8e565b600184018290555b5f1960028401819055600384015560018301805467ffffffffffffffff191690555f808455610cc1906004850190611efd565b5050505050565b5f805f80610a365f1987876108a2565b5f805f80610ce78787876108a2565b90505f80610cf4836112d1565b939a9099509297509195505050505050565b5f610d0f610841565b600201545f03610d1e57505f90565b60065f80610d2f5f198460016108a2565b90505b5f1981146102ed5781610d44816121bf565b925050610d53818460016108a2565b9050610d32565b5f7f4548e57ae2f1604df75a3d17fecaff7dd11ad7a93d9f8a0dc05e7144f46f3f7c8403610dd057610dc8610dc384848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506109a992505050565b61132f565b5060026109a2565b6040517ff17c1d460000000000000000000000000000000000000000000000000000000081526004810185905260240161055b565b5f428367ffffffffffffffff1611610e5b576040517fc0851c8a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8416600482015242602482015260440161055b565b5f610e64610841565b9050610e6f8161142f565b60028101805460019081018083555f928352610e8b9190612134565b90505f826002018281548110610ea357610ea3612094565b5f918252602090912060059091020187815560018101805467ffffffffffffffff191667ffffffffffffffff8916179055905060048101610ee48682612234565b505f19600282018190556003820155610efe8383886114c1565b5095945050505050565b5f805f80610ce78787876111dc565b5f5b5f198214158015610f5b575042836002018381548110610f3b57610f3b612094565b5f91825260209091206001600590920201015467ffffffffffffffff1611155b15610f8c57826002018281548110610f7557610f75612094565b905f5260205f209060050201600301549150610f19565b50919050565b5f5b5f198314610fe0575f846002018481548110610fb257610fb2612094565b905f5260205f209060050201905082815f0154165f14610fd557839150506109a2565b600301549250610f94565b505f199392505050565b5f5b5f198314610fe0575f84600201848154811061100a5761100a612094565b5f918252602090912060059091020160018101549091504267ffffffffffffffff909116111561103a5750610fe0565b805483161561104c57839150506109a2565b600301549250610fec565b5f808515841517801561106f575f92505f915061116c565b61107984876122f0565b91505f6110858861160b565b90505f6110918761160b565b90505f61109e8383611634565b5090505f6f0785ee10d5da46d900f436a0000000008211156110d3576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156110f457670de0b6b3a7640000820491506012015b633b9aca0082111561110d57633b9aca00820491506009015b61271082111561112257612710820491506004015b811561113657600a82049150600101611122565b61114081876122f0565b95506111628b8a61115c878761115787600a61240b565b611650565b89611735565b9097509550505050505b5094509492505050565b5f805f6111838585611825565b9150915080158015611193575081155b156111d4576040517f8eba4d07000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161055b565b509392505050565b5f600783168103611219576040517fbf3cad0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611222610841565b60028101549091505f0361123a575f199150506109a2565b5f5f19861461126d5781600201868154811061125857611258612094565b905f5260205f20906005020160020154611273565b81600101545b9050600184600281111561128957611289612147565b036112a2576109658261129c848461192c565b876119a0565b60028460028111156112b6576112b6612147565b036112c6576109658282876119ee565b61099d8282876119a0565b5f805f1983036112e557505f928392509050565b5f6112ee610841565b600201848154811061130257611302612094565b5f91825260209091206005909102018054600190910154909567ffffffffffffffff909116945092505050565b611339815f611a5a565b15611370576040517f018d151200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61137a30611aaa565b90505f611388600183611b47565b90506113948382611b6b565b156113ce576040517f06c327120000000000000000000000000000000000000000000000000000000081526004810184905260240161055b565b5f6113e36113dd84600a612416565b5f611b47565b90506113ef8482611bba565b15611429576040517fd24a8af10000000000000000000000000000000000000000000000000000000081526004810185905260240161055b565b50505050565b60028101541561143c5750565b6002810180546001018082555f8281529190829061145c5761145c612094565b5f91825260209091206001600590920201818155908101805467ffffffffffffffff19164267ffffffffffffffff161790555f1960028201819055600382015590506114a6611c09565b5f808052600484016020526040902055505f19600590910155565b5f8360020183815481106114d7576114d7612094565b905f5260205f20906005020190505f846001015490505b5f198114610cc1578267ffffffffffffffff1685600201828154811061151657611516612094565b5f91825260209091206001600590920201015467ffffffffffffffff16116115df575f85600201828154811061154e5761154e612094565b905f5260205f2090600502016003015490508486600201838154811061157657611576612094565b5f918252602090912060036005909202018101919091556002840183905583018190555f1981146115cf57848660020182815481106115b7576115b7612094565b905f5260205f209060050201600201819055506115d7565b600186018590555b505050505050565b8460020181815481106115f4576115f4612094565b905f5260205f2090600502016002015490506114ee565b5f8082121561163057600160ff1b820361162a5750600160ff1b919050565b505f0390565b5090565b5f805f1983850993909202808410938190039390930393915050565b5f805f61165d8686611634565b91509150815f036116815783818161167757611677612317565b04925050506109a2565b8382106116cb576040517f6c59da1200000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044810185905260640161055b565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f85871812156117e3577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8411156117d0576117947f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001612424565b84036117a85750600160ff1b90508161181c565b6117b3600a85612437565b6117bc90612456565b6117c78460016122f0565b9150915061181c565b6117d984612456565b839150915061181c565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115611816576117bc600a85612437565b50829050815b94509492505050565b5f601b83900b8314838382611889577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561186957620186a0860595506005850194505b8586601b0b1461188457600a86059550846001019450611869565b61189f565b855f0361189f57505f9250600191506119259050565b848560030b146118fb575f8512156118bf57505f92508291506119259050565b6040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161055b565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791505b9250929050565b5f5b5f19821415801561196f57504283600201838154811061195057611950612094565b5f91825260209091206001600590920201015467ffffffffffffffff16115b15610f8c5782600201828154811061198957611989612094565b905f5260205f20906005020160020154915061192e565b5f5b5f198314610fe0575f8460020184815481106119c0576119c0612094565b905f5260205f209060050201905082815f0154165f146119e357839150506109a2565b6002015492506119a2565b5f5b5f198314610fe0575f846002018481548110611a0e57611a0e612094565b5f918252602090912060059091020160018101549091504267ffffffffffffffff90911611611a3d5750610fe0565b8054831615611a4f57839150506109a2565b6002015492506119f0565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611a9d84848484611c76565b1215979650505050505050565b5f611ab3611d4a565b6040517f54636d2b0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af1158015611b23573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109be919061246a565b5f805f611b548585611df0565b91509150611b628282611e52565b95945050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611bae84848484611c76565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611bfd84848484611c76565b12979650505050505050565b5f8060ff19611c3960017fb750591399365444a618527b69a54ce09476c8bde1ecff60f5aa1fe2b52605ff612134565b604051602001611c4b91815260200190565b60408051601f198184030181529190528051602090910120611c6f91166002612424565b5492915050565b5f8085158415178187128286121817858414178015611c9b578685925092505061181c565b505f85841315611caf575092949193919260015b8386035f8112604c8213178015611ce2578215611cd4575f899450945050505061181c565b885f9450945050505061181c565b600a82900a8981028a828281611cfa57611cfa612317565b0514611d26578415611d16575f8b96509650505050505061181c565b8a5f96509650505050505061181c565b8415611d3b57889650945061181c9350505050565b955087945061181c9350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580611da1575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15611dee576040517f73e6d7b300000000000000000000000000000000000000000000000000000000815273200e12d10bb0c5e4a17e7018f0f1161919bb9389600482015260240161055b565b565b5f805f805f611dff8787611ea4565b92509250925080611e46576040517fc4717966000000000000000000000000000000000000000000000000000000008152600481018490526024810183905260440161055b565b50909590945092505050565b5f805f611e5f8585611825565b91509150806111d4576040517f22c9f7bb000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161055b565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115611eef57600a860460018201600a88065f1493509350935050610351565b859350915060019050610351565b508054611f09906120a8565b5f825580601f10611f18575050565b601f0160209004905f5260205f2090810190611f349190611f37565b50565b5b80821115611630575f8155600101611f38565b803560038110610666575f80fd5b5f8060408385031215611f6a575f80fd5b82359150611f7a60208401611f4b565b90509250929050565b5f60208284031215611f93575f80fd5b5035919050565b5f805f60608486031215611fac575f80fd5b8335925060208401359150611fc360408501611f4b565b90509250925092565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6109a26020830184611fcc565b5f805f806060858703121561201f575f80fd5b84359350602085013567ffffffffffffffff808216821461203e575f80fd5b90935060408601359080821115612053575f80fd5b818701915087601f830112612066575f80fd5b813581811115612074575f80fd5b886020828501011115612085575f80fd5b95989497505060200194505050565b634e487b7160e01b5f52603260045260245ffd5b600181811c908216806120bc57607f821691505b602082108103610f8c57634e487b7160e01b5f52602260045260245ffd5b84815267ffffffffffffffff8416602082015260606040820152816060820152818360808301375f818301608090810191909152601f909201601f191601019392505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156109be576109be612120565b634e487b7160e01b5f52602160045260245ffd5b5f6020828403121561216b575f80fd5b5051919050565b5f60208284031215612182575f80fd5b81516001600160a01b03811681146109a2575f80fd5b6001600160a01b0384168152826020820152606060408201525f611b626060830184611fcc565b5f5f1982036121d0576121d0612120565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b601f82111561222f57805f5260205f20601f840160051c810160208510156122105750805b601f840160051c820191505b81811015610cc1575f815560010161221c565b505050565b815167ffffffffffffffff81111561224e5761224e6121d7565b6122628161225c84546120a8565b846121eb565b602080601f831160018114612295575f841561227e5750858301515b5f19600386901b1c1916600185901b1785556115d7565b5f85815260208120601f198616915b828110156122c3578886015182559484019460019091019084016122a4565b50858210156122e057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8082018281125f83128015821682158216171561230f5761230f612120565b505092915050565b634e487b7160e01b5f52601260045260245ffd5b600181815b8085111561236557815f190482111561234b5761234b612120565b8085161561235857918102915b93841c9390800290612330565b509250929050565b5f8261237b575060016109be565b8161238757505f6109be565b816001811461239d57600281146123a7576123c3565b60019150506109be565b60ff8411156123b8576123b8612120565b50506001821b6109be565b5060208310610133831016604e8410600b84101617156123e6575081810a6109be565b6123f0838361232b565b805f190482111561240357612403612120565b029392505050565b5f6109a2838361236d565b5f6109a260ff84168361236d565b808201808211156109be576109be612120565b5f8261245157634e487b7160e01b5f52601260045260245ffd5b500490565b5f600160ff1b820361162a5761162a612120565b5f6020828403121561247a575f80fd5b815160ff811681146109a2575f80fd"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b506004361061009f575f3560e01c806379ba430511610072578063bb7bb45a11610058578063bb7bb45a14610151578063dad601be14610159578063e388df491461016c575f80fd5b806379ba43051461011e578063b21a249414610131575f80fd5b80630d1e0432146100a35780631cb5642f146100be578063358116b9146100f65780634e6c280e1461010b575b5f80fd5b6100ab61017f565b6040519081526020015b60405180910390f35b6100d16100cc366004612126565b610301565b60408051938452602084019290925267ffffffffffffffff16908201526060016100b5565b610109610104366004612150565b610372565b005b6100d1610119366004612126565b61044c565b6100d161012c366004612167565b6104af565b61014461013f366004612150565b610522565b6040516100b591906121c7565b6100ab6106eb565b6100ab6101673660046121d9565b61074f565b6100d161017a366004612167565b610884565b5f73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b7e24412126ad6a2ce19cbd79fd11b68e7f30cf61630036101d6576040516309e815f560e01b815260040160405180910390fd5b5f6101df6108e8565b905060015f6101f15f19600384610967565b90505b5f1981146102fa57600283600201828154811061021357610213612261565b905f5260205f2090600502015f0154036102e6576102e3826102de85600201848154811061024357610243612261565b905f5260205f209060050201600401805461025d90612275565b80601f016020809104026020016040519081016040528092919081815260200182805461028990612275565b80156102d45780601f106102ab576101008083540402835291602001916102d4565b820191905f5260205f20905b8154815290600101906020018083116102b757829003601f168201915b5050505050610a6e565b610a89565b91505b6102f38160036001610967565b90506101f4565b5091505090565b5f808073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b7e24412126ad6a2ce19cbd79fd11b68e7f30cf616300361035a576040516309e815f560e01b815260040160405180910390fd5b6103648585610aeb565b9250925092505b9250925092565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b7e24412126ad6a2ce19cbd79fd11b68e7f30cf61630036103c8576040516309e815f560e01b815260040160405180910390fd5b610414337f921a3c774c4abecc1bddc4f7beb397fdb2cde7806021d9571086abb74cd023e78360405160200161040091815260200190565b604051602081830303815290604052610b19565b61041d81610c13565b604051819033907f94041431cee1a4c20be97117d396e73eb1e601e124b48fbc5dc07397c31d5f8a905f90a350565b5f808073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b7e24412126ad6a2ce19cbd79fd11b68e7f30cf61630036104a5576040516309e815f560e01b815260040160405180910390fd5b6103648585610df0565b5f808073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b7e24412126ad6a2ce19cbd79fd11b68e7f30cf6163003610508576040516309e815f560e01b815260040160405180910390fd5b610513868686610e00565b92509250925093509350939050565b606073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b7e24412126ad6a2ce19cbd79fd11b68e7f30cf616300361057a576040516309e815f560e01b815260040160405180910390fd5b5f6105836108e8565b600281015490915083106105cb576040517f029c6c35000000000000000000000000000000000000000000000000000000008152600481018490526024015b60405180910390fd5b8060020183815481106105e0576105e0612261565b5f918252602082206001600590920201015467ffffffffffffffff169003610637576040517f029c6c35000000000000000000000000000000000000000000000000000000008152600481018490526024016105c2565b80600201838154811061064c5761064c612261565b905f5260205f209060050201600401805461066690612275565b80601f016020809104026020016040519081016040528092919081815260200182805461069290612275565b80156106dd5780601f106106b4576101008083540402835291602001916106dd565b820191905f5260205f20905b8154815290600101906020018083116106c057829003601f168201915b50505050509150505b919050565b5f73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b7e24412126ad6a2ce19cbd79fd11b68e7f30cf6163003610742576040516309e815f560e01b815260040160405180910390fd5b61074a610e2e565b905090565b5f73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b7e24412126ad6a2ce19cbd79fd11b68e7f30cf61630036107a6576040516309e815f560e01b815260040160405180910390fd5b6107e2337ffc0b9a47b723baf66339577301d13949cab2da29c3baeaa9cfc1f36c513e8f898787878760405160200161040094939291906122a7565b5f6107ee868585610e82565b90505f610831828787878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610f2d92505050565b6040805184815267ffffffffffffffff89166020820152919250829133917fa9c7784142e419f4660627c0c145b3873c2a415ce062f5c81bc19e6850f873d8910160405180910390a39695505050505050565b5f808073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b7e24412126ad6a2ce19cbd79fd11b68e7f30cf61630036108dd576040516309e815f560e01b815260040160405180910390fd5b610513868686611047565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0061093660017f2f8f8ecf1b7a1a3ceda8d15a9a2247a2377b3434535a87f1728021c13fec2e71612301565b60405160200161094891815260200190565b60408051601f1981840301815291905280516020909101201692915050565b5f6007831681036109a4576040517fbf3cad0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6109ad6108e8565b60028101549091505f036109c5575f19915050610a67565b5f5f1986146109f8578160020186815481106109e3576109e3612261565b905f5260205f209060050201600301546109fb565b81545b90506002846002811115610a1157610a11612314565b03610a3357610a2a82610a248484611056565b876110d1565b92505050610a67565b6001846002811115610a4757610a47612314565b03610a5757610a2a828287611129565b610a628282876110d1565b925050505b9392505050565b5f81806020019051810190610a839190612328565b92915050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610ace86868686611196565b915091505f610add83836112b5565b9a9950505050505050505050565b5f805f80610afb5f19878761131b565b90505f80610b0883611410565b939650945091925050509250925092565b5f3073ffffffffffffffffffffffffffffffffffffffff1663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b87919061233f565b6040517f59f89dda00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906359f89dda90610be090879087908790600401612372565b5f604051808303815f87803b158015610bf7575f80fd5b505af1158015610c09573d5f803e3d5ffd5b5050505050505050565b5f610c1c6108e8565b60028101549091508210610c5f576040517f029c6c35000000000000000000000000000000000000000000000000000000008152600481018390526024016105c2565b5f816002018381548110610c7557610c75612261565b5f9182526020822060016005909202019081015490925067ffffffffffffffff169003610cd1576040517f029c6c35000000000000000000000000000000000000000000000000000000008152600481018490526024016105c2565b60018101544267ffffffffffffffff90911611610d1d576040517f99fa8c69000000000000000000000000000000000000000000000000000000008152600481018490526024016105c2565b600281015460038201545f198214610d5d5780846002018381548110610d4557610d45612261565b905f5260205f20906005020160030181905550610d61565b8084555b5f198114610d975781846002018281548110610d7f57610d7f612261565b905f5260205f20906005020160020181905550610d9f565b600184018290555b5f196002840181905560038401556001830180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001690555f808455610de99060048501906120ca565b5050505050565b5f805f80610afb5f198787610967565b5f805f80610e0f878787610967565b90505f80610e1c83611410565b939a9099509297509195505050505050565b5f610e376108e8565b600201545f03610e4657505f90565b60065f80610e575f19846001610967565b90505b5f1981146102fa5781610e6c816123a6565b925050610e7b81846001610967565b9050610e5a565b5f7f4548e57ae2f1604df75a3d17fecaff7dd11ad7a93d9f8a0dc05e7144f46f3f7c8403610ef857610ef0610eeb84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610a6e92505050565b61146e565b506002610a67565b6040517ff17c1d46000000000000000000000000000000000000000000000000000000008152600481018590526024016105c2565b5f428367ffffffffffffffff1611610f83576040517fc0851c8a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201524260248201526044016105c2565b5f610f8c6108e8565b9050610f978161156e565b60028101805460019081018083555f928352610fb39190612301565b90505f826002018281548110610fcb57610fcb612261565b5f91825260209091206005909102018781556001810180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8916179055905060048101611023868261241b565b505f1960028201819055600382015561103d838388611617565b5095945050505050565b5f805f80610e0f87878761131b565b5f5b5f19821415801561109a57504283600201838154811061107a5761107a612261565b5f91825260209091206001600590920201015467ffffffffffffffff1611155b156110cb578260020182815481106110b4576110b4612261565b905f5260205f209060050201600301549150611058565b50919050565b5f5b5f19831461111f575f8460020184815481106110f1576110f1612261565b905f5260205f209060050201905082815f0154165f146111145783915050610a67565b6003015492506110d3565b505f199392505050565b5f5b5f19831461111f575f84600201848154811061114957611149612261565b5f918252602090912060059091020160018101549091504267ffffffffffffffff9091161115611179575061111f565b805483161561118b5783915050610a67565b60030154925061112b565b5f80851584151780156111ae575f92505f91506112ab565b6111b884876124d7565b91505f6111c488611761565b90505f6111d087611761565b90505f6111dd83836117c2565b5090505f6f0785ee10d5da46d900f436a000000000821115611212576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a764000082111561123357670de0b6b3a7640000820491506012015b633b9aca0082111561124c57633b9aca00820491506009015b61271082111561126157612710820491506004015b811561127557600a82049150600101611261565b61127f81876124d7565b95506112a18b8a61129b878761129687600a6125f2565b6117de565b896118c3565b9097509550505050505b5094509492505050565b5f805f6112c285856119cf565b91509150801580156112d2575081155b15611313576040517f8eba4d0700000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016105c2565b509392505050565b5f600783168103611358576040517fbf3cad0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6113616108e8565b60028101549091505f03611379575f19915050610a67565b5f5f1986146113ac5781600201868154811061139757611397612261565b905f5260205f209060050201600201546113b2565b81600101545b905060018460028111156113c8576113c8612314565b036113e157610a2a826113db8484611ad6565b87611b4a565b60028460028111156113f5576113f5612314565b0361140557610a2a828287611b98565b610a62828287611b4a565b5f805f19830361142457505f928392509050565b5f61142d6108e8565b600201848154811061144157611441612261565b5f91825260209091206005909102018054600190910154909567ffffffffffffffff909116945092505050565b611478815f611c04565b156114af576040517f018d151200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6114b930611c54565b90505f6114c7600183611cfe565b90506114d38382611d22565b1561150d576040517f06c32712000000000000000000000000000000000000000000000000000000008152600481018490526024016105c2565b5f61152261151c84600a6125fd565b5f611cfe565b905061152e8482611d71565b15611568576040517fd24a8af1000000000000000000000000000000000000000000000000000000008152600481018590526024016105c2565b50505050565b60028101541561157b5750565b6002810180546001018082555f8281529190829061159b5761159b612261565b5f9182526020909120600160059092020181815590810180547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555f1960028201819055600382015590506115fc611dc0565b5f808052600484016020526040902055505f19600590910155565b5f83600201838154811061162d5761162d612261565b905f5260205f20906005020190505f846001015490505b5f198114610de9578267ffffffffffffffff1685600201828154811061166c5761166c612261565b5f91825260209091206001600590920201015467ffffffffffffffff1611611735575f8560020182815481106116a4576116a4612261565b905f5260205f209060050201600301549050848660020183815481106116cc576116cc612261565b5f918252602090912060036005909202018101919091556002840183905583018190555f198114611725578486600201828154811061170d5761170d612261565b905f5260205f2090600502016002018190555061172d565b600186018590555b505050505050565b84600201818154811061174a5761174a612261565b905f5260205f209060050201600201549050611644565b5f808212156117be577f800000000000000000000000000000000000000000000000000000000000000082036117b857507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b5f805f1983850993909202808410938190039390930393915050565b5f805f6117eb86866117c2565b91509150815f0361180f57838181611805576118056124fe565b0492505050610a67565b838210611859576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016105c2565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f858718121561198d577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84111561197a576119227f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600161260b565b840361195257507f80000000000000000000000000000000000000000000000000000000000000009050816119c6565b61195d600a8561261e565b6119669061263d565b6119718460016124d7565b915091506119c6565b6119838461263d565b83915091506119c6565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8411156119c057611966600a8561261e565b50829050815b94509492505050565b5f601b83900b8314838382611a33577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515611a1357620186a0860595506005850194505b8586601b0b14611a2e57600a86059550846001019450611a13565b611a49565b855f03611a4957505f925060019150611acf9050565b848560030b14611aa5575f851215611a6957505f9250829150611acf9050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016105c2565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791505b9250929050565b5f5b5f198214158015611b19575042836002018381548110611afa57611afa612261565b5f91825260209091206001600590920201015467ffffffffffffffff16115b156110cb57826002018281548110611b3357611b33612261565b905f5260205f209060050201600201549150611ad8565b5f5b5f19831461111f575f846002018481548110611b6a57611b6a612261565b905f5260205f209060050201905082815f0154165f14611b8d5783915050610a67565b600201549250611b4c565b5f5b5f19831461111f575f846002018481548110611bb857611bb8612261565b5f918252602090912060059091020160018101549091504267ffffffffffffffff90911611611be7575061111f565b8054831615611bf95783915050610a67565b600201549250611b9a565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611c4784848484611e43565b1215979650505050505050565b5f611c5d611f17565b6040517f54636d2b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af1158015611cda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a83919061266d565b5f805f611d0b8585611fbd565b91509150611d19828261201f565b95945050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611d6584848484611e43565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611db484848484611e43565b12979650505050505050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00611e0e60017fb750591399365444a618527b69a54ce09476c8bde1ecff60f5aa1fe2b52605ff612301565b604051602001611e2091815260200190565b60408051808303601f190181529190528051602090910120166002015492915050565b5f8085158415178187128286121817858414178015611e6857868592509250506119c6565b505f85841315611e7c575092949193919260015b8386035f8112604c8213178015611eaf578215611ea1575f89945094505050506119c6565b885f945094505050506119c6565b600a82900a8981028a828281611ec757611ec76124fe565b0514611ef3578415611ee3575f8b9650965050505050506119c6565b8a5f9650965050505050506119c6565b8415611f085788965094506119c69350505050565b95508794506119c69350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580611f6e575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15611fbb576040517f73e6d7b300000000000000000000000000000000000000000000000000000000815273200e12d10bb0c5e4a17e7018f0f1161919bb938960048201526024016105c2565b565b5f805f805f611fcc8787612071565b92509250925080612013576040517fc471796600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044016105c2565b50909590945092505050565b5f805f61202c85856119cf565b9150915080611313576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016105c2565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8611156120bc57600a860460018201600a88065f149350935093505061036b565b85935091506001905061036b565b5080546120d690612275565b5f825580601f106120e5575050565b601f0160209004905f5260205f20908101906121019190612104565b50565b5b808211156117be575f8155600101612105565b8035600381106106e6575f80fd5b5f8060408385031215612137575f80fd5b8235915061214760208401612118565b90509250929050565b5f60208284031215612160575f80fd5b5035919050565b5f805f60608486031215612179575f80fd5b833592506020840135915061219060408501612118565b90509250925092565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610a676020830184612199565b5f805f80606085870312156121ec575f80fd5b84359350602085013567ffffffffffffffff808216821461220b575f80fd5b90935060408601359080821115612220575f80fd5b818701915087601f830112612233575f80fd5b813581811115612241575f80fd5b886020828501011115612252575f80fd5b95989497505060200194505050565b634e487b7160e01b5f52603260045260245ffd5b600181811c9082168061228957607f821691505b6020821081036110cb57634e487b7160e01b5f52602260045260245ffd5b84815267ffffffffffffffff8416602082015260606040820152816060820152818360808301375f818301608090810191909152601f909201601f191601019392505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610a8357610a836122ed565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215612338575f80fd5b5051919050565b5f6020828403121561234f575f80fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610a67575f80fd5b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201525f611d196060830184612199565b5f5f1982036123b7576123b76122ed565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b601f82111561241657805f5260205f20601f840160051c810160208510156123f75750805b601f840160051c820191505b81811015610de9575f8155600101612403565b505050565b815167ffffffffffffffff811115612435576124356123be565b612449816124438454612275565b846123d2565b602080601f83116001811461247c575f84156124655750858301515b5f19600386901b1c1916600185901b17855561172d565b5f85815260208120601f198616915b828110156124aa5788860151825594840194600190910190840161248b565b50858210156124c757878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8082018281125f8312801582168215821617156124f6576124f66122ed565b505092915050565b634e487b7160e01b5f52601260045260245ffd5b600181815b8085111561254c57815f1904821115612532576125326122ed565b8085161561253f57918102915b93841c9390800290612517565b509250929050565b5f8261256257506001610a83565b8161256e57505f610a83565b8160018114612584576002811461258e576125aa565b6001915050610a83565b60ff84111561259f5761259f6122ed565b50506001821b610a83565b5060208310610133831016604e8410600b84101617156125cd575081810a610a83565b6125d78383612512565b805f19048211156125ea576125ea6122ed565b029392505050565b5f610a678383612554565b5f610a6760ff841683612554565b80820180821115610a8357610a836122ed565b5f8261263857634e487b7160e01b5f52601260045260245ffd5b500490565b5f7f800000000000000000000000000000000000000000000000000000000000000082036117b8576117b86122ed565b5f6020828403121561267d575f80fd5b815160ff81168114610a67575f80fd"; + hex"608060405234801561000f575f80fd5b506004361061009f575f3560e01c806379ba430511610072578063bb7bb45a11610058578063bb7bb45a14610151578063dad601be14610159578063e388df491461016c575f80fd5b806379ba43051461011e578063b21a249414610131575f80fd5b80630d1e0432146100a35780631cb5642f146100be578063358116b9146100f65780634e6c280e1461010b575b5f80fd5b6100ab61017f565b6040519081526020015b60405180910390f35b6100d16100cc366004611f59565b6102f4565b60408051938452602084019290925267ffffffffffffffff16908201526060016100b5565b610109610104366004611f83565b610358565b005b6100d1610119366004611f59565b610425565b6100d161012c366004611f9a565b61047b565b61014461013f366004611f83565b6104e1565b6040516100b59190611ffa565b6100ab61066b565b6100ab61016736600461200c565b6106c2565b6100d161017a366004611f9a565b6107ea565b5f6001600160a01b037f000000000000000000000000ad6219d71ccf6904c0633e3a8a8c423f54036fd11630036101c9576040516309e815f560e01b815260040160405180910390fd5b5f6101d2610841565b905060015f6101e45f196003846108a2565b90505b5f1981146102ed57600283600201828154811061020657610206612094565b905f5260205f2090600502015f0154036102d9576102d6826102d185600201848154811061023657610236612094565b905f5260205f2090600502016004018054610250906120a8565b80601f016020809104026020016040519081016040528092919081815260200182805461027c906120a8565b80156102c75780601f1061029e576101008083540402835291602001916102c7565b820191905f5260205f20905b8154815290600101906020018083116102aa57829003601f168201915b50505050506109a9565b6109c4565b91505b6102e681600360016108a2565b90506101e7565b5091505090565b5f80806001600160a01b037f000000000000000000000000ad6219d71ccf6904c0633e3a8a8c423f54036fd1163003610340576040516309e815f560e01b815260040160405180910390fd5b61034a8585610a26565b9250925092505b9250925092565b6001600160a01b037f000000000000000000000000ad6219d71ccf6904c0633e3a8a8c423f54036fd11630036103a1576040516309e815f560e01b815260040160405180910390fd5b6103ed337f921a3c774c4abecc1bddc4f7beb397fdb2cde7806021d9571086abb74cd023e7836040516020016103d991815260200190565b604051602081830303815290604052610a54565b6103f681610b34565b604051819033907f94041431cee1a4c20be97117d396e73eb1e601e124b48fbc5dc07397c31d5f8a905f90a350565b5f80806001600160a01b037f000000000000000000000000ad6219d71ccf6904c0633e3a8a8c423f54036fd1163003610471576040516309e815f560e01b815260040160405180910390fd5b61034a8585610cc8565b5f80806001600160a01b037f000000000000000000000000ad6219d71ccf6904c0633e3a8a8c423f54036fd11630036104c7576040516309e815f560e01b815260040160405180910390fd5b6104d2868686610cd8565b92509250925093509350939050565b60606001600160a01b037f000000000000000000000000ad6219d71ccf6904c0633e3a8a8c423f54036fd116300361052c576040516309e815f560e01b815260040160405180910390fd5b5f610535610841565b600281015490915083106105645760405163029c6c3560e01b8152600481018490526024015b60405180910390fd5b80600201838154811061057957610579612094565b5f918252602082206001600590920201015467ffffffffffffffff1690036105b75760405163029c6c3560e01b81526004810184905260240161055b565b8060020183815481106105cc576105cc612094565b905f5260205f20906005020160040180546105e6906120a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610612906120a8565b801561065d5780601f106106345761010080835404028352916020019161065d565b820191905f5260205f20905b81548152906001019060200180831161064057829003601f168201915b50505050509150505b919050565b5f6001600160a01b037f000000000000000000000000ad6219d71ccf6904c0633e3a8a8c423f54036fd11630036106b5576040516309e815f560e01b815260040160405180910390fd5b6106bd610d06565b905090565b5f6001600160a01b037f000000000000000000000000ad6219d71ccf6904c0633e3a8a8c423f54036fd116300361070c576040516309e815f560e01b815260040160405180910390fd5b610748337ffc0b9a47b723baf66339577301d13949cab2da29c3baeaa9cfc1f36c513e8f89878787876040516020016103d994939291906120da565b5f610754868585610d5a565b90505f610797828787878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610e0592505050565b6040805184815267ffffffffffffffff89166020820152919250829133917fa9c7784142e419f4660627c0c145b3873c2a415ce062f5c81bc19e6850f873d8910160405180910390a39695505050505050565b5f80806001600160a01b037f000000000000000000000000ad6219d71ccf6904c0633e3a8a8c423f54036fd1163003610836576040516309e815f560e01b815260040160405180910390fd5b6104d2868686610f08565b5f8060ff1961087160017f2f8f8ecf1b7a1a3ceda8d15a9a2247a2377b3434535a87f1728021c13fec2e71612134565b60405160200161088391815260200190565b60408051601f1981840301815291905280516020909101201692915050565b5f6007831681036108df576040517fbf3cad0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6108e8610841565b60028101549091505f03610900575f199150506109a2565b5f5f1986146109335781600201868154811061091e5761091e612094565b905f5260205f20906005020160030154610936565b81545b9050600284600281111561094c5761094c612147565b0361096e576109658261095f8484610f17565b87610f92565b925050506109a2565b600184600281111561098257610982612147565b0361099257610965828287610fea565b61099d828287610f92565b925050505b9392505050565b5f818060200190518101906109be919061215b565b92915050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480610a0986868686611057565b915091505f610a188383611176565b9a9950505050505050505050565b5f805f80610a365f1987876111dc565b90505f80610a43836112d1565b939650945091925050509250925092565b5f306001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a91573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab59190612172565b6040517f59f89dda0000000000000000000000000000000000000000000000000000000081529091506001600160a01b038216906359f89dda90610b0190879087908790600401612198565b5f604051808303815f87803b158015610b18575f80fd5b505af1158015610b2a573d5f803e3d5ffd5b5050505050505050565b5f610b3d610841565b60028101549091508210610b675760405163029c6c3560e01b81526004810183905260240161055b565b5f816002018381548110610b7d57610b7d612094565b5f9182526020822060016005909202019081015490925067ffffffffffffffff169003610bc05760405163029c6c3560e01b81526004810184905260240161055b565b60018101544267ffffffffffffffff90911611610c0c576040517f99fa8c690000000000000000000000000000000000000000000000000000000081526004810184905260240161055b565b600281015460038201545f198214610c4c5780846002018381548110610c3457610c34612094565b905f5260205f20906005020160030181905550610c50565b8084555b5f198114610c865781846002018281548110610c6e57610c6e612094565b905f5260205f20906005020160020181905550610c8e565b600184018290555b5f1960028401819055600384015560018301805467ffffffffffffffff191690555f808455610cc1906004850190611efd565b5050505050565b5f805f80610a365f1987876108a2565b5f805f80610ce78787876108a2565b90505f80610cf4836112d1565b939a9099509297509195505050505050565b5f610d0f610841565b600201545f03610d1e57505f90565b60065f80610d2f5f198460016108a2565b90505b5f1981146102ed5781610d44816121bf565b925050610d53818460016108a2565b9050610d32565b5f7f4548e57ae2f1604df75a3d17fecaff7dd11ad7a93d9f8a0dc05e7144f46f3f7c8403610dd057610dc8610dc384848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506109a992505050565b61132f565b5060026109a2565b6040517ff17c1d460000000000000000000000000000000000000000000000000000000081526004810185905260240161055b565b5f428367ffffffffffffffff1611610e5b576040517fc0851c8a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8416600482015242602482015260440161055b565b5f610e64610841565b9050610e6f8161142f565b60028101805460019081018083555f928352610e8b9190612134565b90505f826002018281548110610ea357610ea3612094565b5f918252602090912060059091020187815560018101805467ffffffffffffffff191667ffffffffffffffff8916179055905060048101610ee48682612234565b505f19600282018190556003820155610efe8383886114c1565b5095945050505050565b5f805f80610ce78787876111dc565b5f5b5f198214158015610f5b575042836002018381548110610f3b57610f3b612094565b5f91825260209091206001600590920201015467ffffffffffffffff1611155b15610f8c57826002018281548110610f7557610f75612094565b905f5260205f209060050201600301549150610f19565b50919050565b5f5b5f198314610fe0575f846002018481548110610fb257610fb2612094565b905f5260205f209060050201905082815f0154165f14610fd557839150506109a2565b600301549250610f94565b505f199392505050565b5f5b5f198314610fe0575f84600201848154811061100a5761100a612094565b5f918252602090912060059091020160018101549091504267ffffffffffffffff909116111561103a5750610fe0565b805483161561104c57839150506109a2565b600301549250610fec565b5f808515841517801561106f575f92505f915061116c565b61107984876122f0565b91505f6110858861160b565b90505f6110918761160b565b90505f61109e8383611634565b5090505f6f0785ee10d5da46d900f436a0000000008211156110d3576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156110f457670de0b6b3a7640000820491506012015b633b9aca0082111561110d57633b9aca00820491506009015b61271082111561112257612710820491506004015b811561113657600a82049150600101611122565b61114081876122f0565b95506111628b8a61115c878761115787600a61240b565b611650565b89611735565b9097509550505050505b5094509492505050565b5f805f6111838585611825565b9150915080158015611193575081155b156111d4576040517f8eba4d07000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161055b565b509392505050565b5f600783168103611219576040517fbf3cad0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611222610841565b60028101549091505f0361123a575f199150506109a2565b5f5f19861461126d5781600201868154811061125857611258612094565b905f5260205f20906005020160020154611273565b81600101545b9050600184600281111561128957611289612147565b036112a2576109658261129c848461192c565b876119a0565b60028460028111156112b6576112b6612147565b036112c6576109658282876119ee565b61099d8282876119a0565b5f805f1983036112e557505f928392509050565b5f6112ee610841565b600201848154811061130257611302612094565b5f91825260209091206005909102018054600190910154909567ffffffffffffffff909116945092505050565b611339815f611a5a565b15611370576040517f018d151200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61137a30611aaa565b90505f611388600183611b47565b90506113948382611b6b565b156113ce576040517f06c327120000000000000000000000000000000000000000000000000000000081526004810184905260240161055b565b5f6113e36113dd84600a612416565b5f611b47565b90506113ef8482611bba565b15611429576040517fd24a8af10000000000000000000000000000000000000000000000000000000081526004810185905260240161055b565b50505050565b60028101541561143c5750565b6002810180546001018082555f8281529190829061145c5761145c612094565b5f91825260209091206001600590920201818155908101805467ffffffffffffffff19164267ffffffffffffffff161790555f1960028201819055600382015590506114a6611c09565b5f808052600484016020526040902055505f19600590910155565b5f8360020183815481106114d7576114d7612094565b905f5260205f20906005020190505f846001015490505b5f198114610cc1578267ffffffffffffffff1685600201828154811061151657611516612094565b5f91825260209091206001600590920201015467ffffffffffffffff16116115df575f85600201828154811061154e5761154e612094565b905f5260205f2090600502016003015490508486600201838154811061157657611576612094565b5f918252602090912060036005909202018101919091556002840183905583018190555f1981146115cf57848660020182815481106115b7576115b7612094565b905f5260205f209060050201600201819055506115d7565b600186018590555b505050505050565b8460020181815481106115f4576115f4612094565b905f5260205f2090600502016002015490506114ee565b5f8082121561163057600160ff1b820361162a5750600160ff1b919050565b505f0390565b5090565b5f805f1983850993909202808410938190039390930393915050565b5f805f61165d8686611634565b91509150815f036116815783818161167757611677612317565b04925050506109a2565b8382106116cb576040517f6c59da1200000000000000000000000000000000000000000000000000000000815260048101879052602481018690526044810185905260640161055b565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f85871812156117e3577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8411156117d0576117947f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001612424565b84036117a85750600160ff1b90508161181c565b6117b3600a85612437565b6117bc90612456565b6117c78460016122f0565b9150915061181c565b6117d984612456565b839150915061181c565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115611816576117bc600a85612437565b50829050815b94509492505050565b5f601b83900b8314838382611889577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561186957620186a0860595506005850194505b8586601b0b1461188457600a86059550846001019450611869565b61189f565b855f0361189f57505f9250600191506119259050565b848560030b146118fb575f8512156118bf57505f92508291506119259050565b6040517fd556b111000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161055b565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791505b9250929050565b5f5b5f19821415801561196f57504283600201838154811061195057611950612094565b5f91825260209091206001600590920201015467ffffffffffffffff16115b15610f8c5782600201828154811061198957611989612094565b905f5260205f20906005020160020154915061192e565b5f5b5f198314610fe0575f8460020184815481106119c0576119c0612094565b905f5260205f209060050201905082815f0154165f146119e357839150506109a2565b6002015492506119a2565b5f5b5f198314610fe0575f846002018481548110611a0e57611a0e612094565b5f918252602090912060059091020160018101549091504267ffffffffffffffff90911611611a3d5750610fe0565b8054831615611a4f57839150506109a2565b6002015492506119f0565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611a9d84848484611c76565b1215979650505050505050565b5f611ab3611d4a565b6040517f54636d2b0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015273200e12d10bb0c5e4a17e7018f0f1161919bb9389906354636d2b906024016020604051808303815f875af1158015611b23573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109be919061246a565b5f805f611b548585611df0565b91509150611b628282611e52565b95945050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611bae84848484611c76565b13979650505050505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d611bfd84848484611c76565b12979650505050505050565b5f8060ff19611c3960017fb750591399365444a618527b69a54ce09476c8bde1ecff60f5aa1fe2b52605ff612134565b604051602001611c4b91815260200190565b60408051601f198184030181529190528051602090910120611c6f91166002612424565b5492915050565b5f8085158415178187128286121817858414178015611c9b578685925092505061181c565b505f85841315611caf575092949193919260015b8386035f8112604c8213178015611ce2578215611cd4575f899450945050505061181c565b885f9450945050505061181c565b600a82900a8981028a828281611cfa57611cfa612317565b0514611d26578415611d16575f8b96509650505050505061181c565b8a5f96509650505050505061181c565b8415611d3b57889650945061181c9350505050565b955087945061181c9350505050565b73200e12d10bb0c5e4a17e7018f0f1161919bb93893b1580611da1575073200e12d10bb0c5e4a17e7018f0f1161919bb93893f7f1de7d717526cba131d684e312dedbf0852adef9cced9e36798ae4937f7145d4114155b15611dee576040517f73e6d7b300000000000000000000000000000000000000000000000000000000815273200e12d10bb0c5e4a17e7018f0f1161919bb9389600482015260240161055b565b565b5f805f805f611dff8787611ea4565b92509250925080611e46576040517fc4717966000000000000000000000000000000000000000000000000000000008152600481018490526024810183905260440161055b565b50909590945092505050565b5f805f611e5f8585611825565b91509150806111d4576040517f22c9f7bb000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260440161055b565b5f808060ff841681037f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115611eef57600a860460018201600a88065f1493509350935050610351565b859350915060019050610351565b508054611f09906120a8565b5f825580601f10611f18575050565b601f0160209004905f5260205f2090810190611f349190611f37565b50565b5b80821115611630575f8155600101611f38565b803560038110610666575f80fd5b5f8060408385031215611f6a575f80fd5b82359150611f7a60208401611f4b565b90509250929050565b5f60208284031215611f93575f80fd5b5035919050565b5f805f60608486031215611fac575f80fd5b8335925060208401359150611fc360408501611f4b565b90509250925092565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6109a26020830184611fcc565b5f805f806060858703121561201f575f80fd5b84359350602085013567ffffffffffffffff808216821461203e575f80fd5b90935060408601359080821115612053575f80fd5b818701915087601f830112612066575f80fd5b813581811115612074575f80fd5b886020828501011115612085575f80fd5b95989497505060200194505050565b634e487b7160e01b5f52603260045260245ffd5b600181811c908216806120bc57607f821691505b602082108103610f8c57634e487b7160e01b5f52602260045260245ffd5b84815267ffffffffffffffff8416602082015260606040820152816060820152818360808301375f818301608090810191909152601f909201601f191601019392505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156109be576109be612120565b634e487b7160e01b5f52602160045260245ffd5b5f6020828403121561216b575f80fd5b5051919050565b5f60208284031215612182575f80fd5b81516001600160a01b03811681146109a2575f80fd5b6001600160a01b0384168152826020820152606060408201525f611b626060830184611fcc565b5f5f1982036121d0576121d0612120565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b601f82111561222f57805f5260205f20601f840160051c810160208510156122105750805b601f840160051c820191505b81811015610cc1575f815560010161221c565b505050565b815167ffffffffffffffff81111561224e5761224e6121d7565b6122628161225c84546120a8565b846121eb565b602080601f831160018114612295575f841561227e5750858301515b5f19600386901b1c1916600185901b1785556115d7565b5f85815260208120601f198616915b828110156122c3578886015182559484019460019091019084016122a4565b50858210156122e057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8082018281125f83128015821682158216171561230f5761230f612120565b505092915050565b634e487b7160e01b5f52601260045260245ffd5b600181815b8085111561236557815f190482111561234b5761234b612120565b8085161561235857918102915b93841c9390800290612330565b509250929050565b5f8261237b575060016109be565b8161238757505f6109be565b816001811461239d57600281146123a7576123c3565b60019150506109be565b60ff8411156123b8576123b8612120565b50506001821b6109be565b5060208310610133831016604e8410600b84101617156123e6575081810a6109be565b6123f0838361232b565b805f190482111561240357612403612120565b029392505050565b5f6109a2838361236d565b5f6109a260ff84168361236d565b808201808211156109be576109be612120565b5f8261245157634e487b7160e01b5f52601260045260245ffd5b500490565b5f600160ff1b820361162a5761162a612120565b5f6020828403121561247a575f80fd5b815160ff811681146109a2575f80fd"; diff --git a/src/generated/candidate/StoxOffchainAssetReceiptVaultAuthorizerV1.pointers.sol b/src/generated/candidate/StoxOffchainAssetReceiptVaultAuthorizerV1.pointers.sol index e161c73a..f186136e 100644 --- a/src/generated/candidate/StoxOffchainAssetReceiptVaultAuthorizerV1.pointers.sol +++ b/src/generated/candidate/StoxOffchainAssetReceiptVaultAuthorizerV1.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0xf8a1d9b2fa068bae3c1a607434db48364a5cdab3020bd7e315ed2662a3b35b5f); +bytes32 constant BYTECODE_HASH = bytes32(0x919c35e875f349116c85041fdbaa9218cd417cc458c9448747947d8497a712a0); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x2EA0d35d0B1F57C42e6130f298930228bCbFDe9b); +address constant DEPLOYED_ADDRESS = address(0x93e72E8e8f9f304477eDb47de528D79867Db1af8); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611746806100d65f395ff3fe608060405234801561000f575f80fd5b506004361061009f575f3560e01c8063439fab911161007257806391d148541161005857806391d1485414610168578063a217fddf146101cc578063d547741f146101d3575f80fd5b8063439fab911461014257806359f89dda14610155575f80fd5b806301ffc9a7146100a3578063248a9ca3146100cb5780632f2ff15d1461011a57806336568abe1461012f575b5f80fd5b6100b66100b13660046112aa565b6101e6565b60405190151581526020015b60405180910390f35b61010c6100d93660046112f0565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016100c2565b61012d610128366004611328565b6102d9565b005b61012d61013d366004611328565b610322565b61010c610150366004611449565b610380565b61012d610163366004611483565b6106a0565b6100b6610176366004611328565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61010c5f81565b61012d6101e1366004611328565b610a49565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f59f89dda00000000000000000000000000000000000000000000000000000000148061027857507fffffffff0000000000000000000000000000000000000000000000000000000082167f439fab9100000000000000000000000000000000000000000000000000000000145b806102c457507fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000145b806102d357506102d382610a8c565b92915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461031281610b22565b61031c8383610b2f565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610371576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61037b8282610c4d565b505050565b5f8061038a610d29565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156103b65750825b90505f8267ffffffffffffffff1660011480156103d25750303b155b9050811580156103e0575080155b15610417576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156104785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b5f8780602001905181019061048d91906114d8565b90505f61049982610d51565b90507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc381146104cb5796506106359050565b6105157ffc0b9a47b723baf66339577301d13949cab2da29c3baeaa9cfc1f36c513e8f897fd6075ca92e18a15ce0e8ecaaae57a112072844045d11beeb264aac5f85e0daf26110f9565b61053f7fd6075ca92e18a15ce0e8ecaaae57a112072844045d11beeb264aac5f85e0daf2806110f9565b6105897f921a3c774c4abecc1bddc4f7beb397fdb2cde7806021d9571086abb74cd023e77fe25ff801c3c463dad5f8999289b7b43090e0f6f5039ae7c220cbb762fe8ff3736110f9565b6105b37fe25ff801c3c463dad5f8999289b7b43090e0f6f5039ae7c220cbb762fe8ff373806110f9565b6105e07fd6075ca92e18a15ce0e8ecaaae57a112072844045d11beeb264aac5f85e0daf2835f0151610b2f565b5061060e7fe25ff801c3c463dad5f8999289b7b43090e0f6f5039ae7c220cbb762fe8ff373835f0151610b2f565b507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc3975050505b83156106965784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050919050565b7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a8214806106ed57507f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a4882145b156109b6575f805f7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a850361074d575f848060200190518101906107319190611536565b9050805f01519350806020015192508060600151915050610779565b5f84806020019051810190610762919061162b565b805160208201516080909201519095509093509150505b80156109ae5773ffffffffffffffffffffffffffffffffffffffff83161580156107e6575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f96f78a99f93d631b75bc050854c9b764642c10564e41ed27c197a36ddabb1df9602052604090205460ff165b80610853575073ffffffffffffffffffffffffffffffffffffffff8216158015610853575073ffffffffffffffffffffffffffffffffffffffff83165f9081527f3907f76fa0fb1e5d0f263c5c4fe4316026052cf960c55a1c768106d8b9701c10602052604090205460ff165b1561086057505050505050565b7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a851480156108d2575073ffffffffffffffffffffffffffffffffffffffff86165f9081527f6ba48721fcbb2613af13d8285fe9ee4a081f7995464037bb5ea27397912881d2602052604090205460ff165b8061094a57507f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a488514801561094a575073ffffffffffffffffffffffffffffffffffffffff86165f9081527f29e42896fa6edf5a5d7ff0bcd00acffbece6eb6cc7b44d0807bfd84929cc6e1b602052604090205460ff165b1561095757505050505050565b6040517ffe720f7800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8085166004830152831660248201526044015b60405180910390fd5b505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205460ff1615610a1157505050565b8282826040517f3ae4063b0000000000000000000000000000000000000000000000000000000081526004016109a5939291906116ed565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a8281610b22565b61031c8383610c4d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102d357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146102d3565b610b2c813361119a565b50565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16610c44575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610be03390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506102d3565b5f9150506102d3565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615610c44575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506102d3565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006102d3565b5f610d5a611244565b815173ffffffffffffffffffffffffffffffffffffffff16610da8576040517fd264eed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610df27f50a07cb25d0d864370863300b20987dfdae089abad71b607faf639d09d0533917f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b6110f9565b610e1c7f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b806110f9565b610e667f3dd35eca0ca8a128757fa464a5dfa4ad6cc4853cad96dce4e90fdbea4f0a52e37f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d6110f9565b610e907f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d806110f9565b610eda7f54f0af3716c79b30b8c228679d31d77a1a5f526c16af3262730e0a8de4363fed7fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c6110f9565b610f047fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c806110f9565b610f4e7f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8217f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc026110f9565b610f787f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc02806110f9565b610fc27f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e9828697fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d36110f9565b610fec7fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d3806110f9565b6110197f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b835f0151610b2f565b506110477f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d835f0151610b2f565b506110757fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c835f0151610b2f565b506110a37f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc02835f0151610b2f565b506110d17fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d3835f0151610b2f565b507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc392915050565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268005f611152845f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b5f85815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611240576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016109a5565b5050565b61124c61124e565b565b61125661128c565b61124c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611295610d29565b5468010000000000000000900460ff16919050565b5f602082840312156112ba575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112e9575f80fd5b9392505050565b5f60208284031215611300575f80fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610b2c575f80fd5b5f8060408385031215611339575f80fd5b82359150602083013561134b81611307565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160a0810167ffffffffffffffff811182821017156113a6576113a6611356565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156113d5576113d5611356565b604052919050565b5f82601f8301126113ec575f80fd5b813567ffffffffffffffff81111561140657611406611356565b6114196020601f19601f840116016113ac565b81815284602083860101111561142d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215611459575f80fd5b813567ffffffffffffffff81111561146f575f80fd5b61147b848285016113dd565b949350505050565b5f805f60608486031215611495575f80fd5b83356114a081611307565b925060208401359150604084013567ffffffffffffffff8111156114c2575f80fd5b6114ce868287016113dd565b9150509250925092565b5f602082840312156114e8575f80fd5b6040516020810181811067ffffffffffffffff8211171561150b5761150b611356565b604052825161151981611307565b81529392505050565b80518015158114611531575f80fd5b919050565b5f60808284031215611546575f80fd5b6040516080810181811067ffffffffffffffff8211171561156957611569611356565b604052825161157781611307565b8152602083015161158781611307565b6020820152604083810151908201526115a260608401611522565b60608201529392505050565b5f82601f8301126115bd575f80fd5b8151602067ffffffffffffffff8211156115d9576115d9611356565b8160051b6115e88282016113ac565b9283528481018201928281019087851115611601575f80fd5b83870192505b8483101561162057825182529183019190830190611607565b979650505050505050565b5f6020828403121561163b575f80fd5b815167ffffffffffffffff80821115611652575f80fd5b9083019060a08286031215611665575f80fd5b61166d611383565b825161167881611307565b8152602083015161168881611307565b602082015260408301518281111561169e575f80fd5b6116aa878286016115ae565b6040830152506060830151828111156116c1575f80fd5b6116cd878286016115ae565b6060830152506116df60808401611522565b608082015295945050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201525f82518060608401528060208501608085015e5f608082850101526080601f19601f83011684010191505094935050505056"; + hex"6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6115cd806100d65f395ff3fe608060405234801561000f575f80fd5b506004361061009f575f3560e01c8063439fab911161007257806391d148541161005857806391d1485414610168578063a217fddf146101bf578063d547741f146101c6575f80fd5b8063439fab911461014257806359f89dda14610155575f80fd5b806301ffc9a7146100a3578063248a9ca3146100cb5780632f2ff15d1461011a57806336568abe1461012f575b5f80fd5b6100b66100b136600461114b565b6101d9565b60405190151581526020015b60405180910390f35b61010c6100d9366004611191565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016100c2565b61012d6101283660046111bc565b6102cc565b005b61012d61013d3660046111bc565b610315565b61010c6101503660046112dd565b610366565b61012d610163366004611317565b61065a565b6100b66101763660046111bc565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61010c5f81565b61012d6101d43660046111bc565b61099b565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f59f89dda00000000000000000000000000000000000000000000000000000000148061026b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f439fab9100000000000000000000000000000000000000000000000000000000145b806102b757507fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000145b806102c657506102c6826109de565b92915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461030581610a74565b61030f8383610a81565b50505050565b6001600160a01b0381163314610357576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103618282610b4d565b505050565b5f80610370610bf1565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f8115801561039c5750825b90505f8267ffffffffffffffff1660011480156103b85750303b155b9050811580156103c6575080155b156103fd576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561044857845468ff00000000000000001916680100000000000000001785555b5f8780602001905181019061045d919061136c565b90505f61046982610c19565b90507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc3811461049b5796506106059050565b6104e57ffc0b9a47b723baf66339577301d13949cab2da29c3baeaa9cfc1f36c513e8f897fd6075ca92e18a15ce0e8ecaaae57a112072844045d11beeb264aac5f85e0daf2610fb4565b61050f7fd6075ca92e18a15ce0e8ecaaae57a112072844045d11beeb264aac5f85e0daf280610fb4565b6105597f921a3c774c4abecc1bddc4f7beb397fdb2cde7806021d9571086abb74cd023e77fe25ff801c3c463dad5f8999289b7b43090e0f6f5039ae7c220cbb762fe8ff373610fb4565b6105837fe25ff801c3c463dad5f8999289b7b43090e0f6f5039ae7c220cbb762fe8ff37380610fb4565b6105b07fd6075ca92e18a15ce0e8ecaaae57a112072844045d11beeb264aac5f85e0daf2835f0151610a81565b506105de7fe25ff801c3c463dad5f8999289b7b43090e0f6f5039ae7c220cbb762fe8ff373835f0151610a81565b507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc3975050505b831561065057845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050919050565b7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a8214806106a757507f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a4882145b15610915575f805f7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a8503610707575f848060200190518101906106eb91906113ca565b9050805f01519350806020015192508060600151915050610733565b5f8480602001905181019061071c91906114bf565b805160208201516080909201519095509093509150505b801561090d576001600160a01b03831615801561078657506001600160a01b0382165f9081527f96f78a99f93d631b75bc050854c9b764642c10564e41ed27c197a36ddabb1df9602052604090205460ff165b806107d957506001600160a01b0382161580156107d957506001600160a01b0383165f9081527f3907f76fa0fb1e5d0f263c5c4fe4316026052cf960c55a1c768106d8b9701c10602052604090205460ff165b156107e657505050505050565b7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a8514801561084b57506001600160a01b0386165f9081527f6ba48721fcbb2613af13d8285fe9ee4a081f7995464037bb5ea27397912881d2602052604090205460ff165b806108b657507f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a48851480156108b657506001600160a01b0386165f9081527f29e42896fa6edf5a5d7ff0bcd00acffbece6eb6cc7b44d0807bfd84929cc6e1b602052604090205460ff165b156108c357505050505050565b6040517ffe720f780000000000000000000000000000000000000000000000000000000081526001600160a01b038085166004830152831660248201526044015b60405180910390fd5b505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038716845290915290205460ff161561096357505050565b8282826040517f3ae4063b00000000000000000000000000000000000000000000000000000000815260040161090493929190611581565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546109d481610a74565b61030f8383610b4d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102c657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146102c6565b610a7e8133611055565b50565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16610b44575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610afa3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506102c6565b5f9150506102c6565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615610b44575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506102c6565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006102c6565b5f610c226110e5565b81516001600160a01b0316610c63576040517fd264eed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cad7f50a07cb25d0d864370863300b20987dfdae089abad71b607faf639d09d0533917f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b610fb4565b610cd77f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b80610fb4565b610d217f3dd35eca0ca8a128757fa464a5dfa4ad6cc4853cad96dce4e90fdbea4f0a52e37f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d610fb4565b610d4b7f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d80610fb4565b610d957f54f0af3716c79b30b8c228679d31d77a1a5f526c16af3262730e0a8de4363fed7fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c610fb4565b610dbf7fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c80610fb4565b610e097f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8217f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc02610fb4565b610e337f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc0280610fb4565b610e7d7f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e9828697fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d3610fb4565b610ea77fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d380610fb4565b610ed47f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b835f0151610a81565b50610f027f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d835f0151610a81565b50610f307fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c835f0151610a81565b50610f5e7f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc02835f0151610a81565b50610f8c7fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d3835f0151610a81565b507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc392915050565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268005f61100d845f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b5f85815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166110e1576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610904565b5050565b6110ed6110ef565b565b6110f761112d565b6110ed576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611136610bf1565b5468010000000000000000900460ff16919050565b5f6020828403121561115b575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461118a575f80fd5b9392505050565b5f602082840312156111a1575f80fd5b5035919050565b6001600160a01b0381168114610a7e575f80fd5b5f80604083850312156111cd575f80fd5b8235915060208301356111df816111a8565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160a0810167ffffffffffffffff8111828210171561123a5761123a6111ea565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611269576112696111ea565b604052919050565b5f82601f830112611280575f80fd5b813567ffffffffffffffff81111561129a5761129a6111ea565b6112ad6020601f19601f84011601611240565b8181528460208386010111156112c1575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156112ed575f80fd5b813567ffffffffffffffff811115611303575f80fd5b61130f84828501611271565b949350505050565b5f805f60608486031215611329575f80fd5b8335611334816111a8565b925060208401359150604084013567ffffffffffffffff811115611356575f80fd5b61136286828701611271565b9150509250925092565b5f6020828403121561137c575f80fd5b6040516020810181811067ffffffffffffffff8211171561139f5761139f6111ea565b60405282516113ad816111a8565b81529392505050565b805180151581146113c5575f80fd5b919050565b5f608082840312156113da575f80fd5b6040516080810181811067ffffffffffffffff821117156113fd576113fd6111ea565b604052825161140b816111a8565b8152602083015161141b816111a8565b602082015260408381015190820152611436606084016113b6565b60608201529392505050565b5f82601f830112611451575f80fd5b8151602067ffffffffffffffff82111561146d5761146d6111ea565b8160051b61147c828201611240565b9283528481018201928281019087851115611495575f80fd5b83870192505b848310156114b45782518252918301919083019061149b565b979650505050505050565b5f602082840312156114cf575f80fd5b815167ffffffffffffffff808211156114e6575f80fd5b9083019060a082860312156114f9575f80fd5b611501611217565b825161150c816111a8565b8152602083015161151c816111a8565b6020820152604083015182811115611532575f80fd5b61153e87828601611442565b604083015250606083015182811115611555575f80fd5b61156187828601611442565b606083015250611573608084016113b6565b608082015295945050505050565b6001600160a01b0384168152826020820152606060408201525f82518060608401528060208501608085015e5f608082850101526080601f19601f83011684010191505094935050505056"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b506004361061009f575f3560e01c8063439fab911161007257806391d148541161005857806391d1485414610168578063a217fddf146101cc578063d547741f146101d3575f80fd5b8063439fab911461014257806359f89dda14610155575f80fd5b806301ffc9a7146100a3578063248a9ca3146100cb5780632f2ff15d1461011a57806336568abe1461012f575b5f80fd5b6100b66100b13660046112aa565b6101e6565b60405190151581526020015b60405180910390f35b61010c6100d93660046112f0565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016100c2565b61012d610128366004611328565b6102d9565b005b61012d61013d366004611328565b610322565b61010c610150366004611449565b610380565b61012d610163366004611483565b6106a0565b6100b6610176366004611328565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61010c5f81565b61012d6101e1366004611328565b610a49565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f59f89dda00000000000000000000000000000000000000000000000000000000148061027857507fffffffff0000000000000000000000000000000000000000000000000000000082167f439fab9100000000000000000000000000000000000000000000000000000000145b806102c457507fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000145b806102d357506102d382610a8c565b92915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461031281610b22565b61031c8383610b2f565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610371576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61037b8282610c4d565b505050565b5f8061038a610d29565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156103b65750825b90505f8267ffffffffffffffff1660011480156103d25750303b155b9050811580156103e0575080155b15610417576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156104785784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b5f8780602001905181019061048d91906114d8565b90505f61049982610d51565b90507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc381146104cb5796506106359050565b6105157ffc0b9a47b723baf66339577301d13949cab2da29c3baeaa9cfc1f36c513e8f897fd6075ca92e18a15ce0e8ecaaae57a112072844045d11beeb264aac5f85e0daf26110f9565b61053f7fd6075ca92e18a15ce0e8ecaaae57a112072844045d11beeb264aac5f85e0daf2806110f9565b6105897f921a3c774c4abecc1bddc4f7beb397fdb2cde7806021d9571086abb74cd023e77fe25ff801c3c463dad5f8999289b7b43090e0f6f5039ae7c220cbb762fe8ff3736110f9565b6105b37fe25ff801c3c463dad5f8999289b7b43090e0f6f5039ae7c220cbb762fe8ff373806110f9565b6105e07fd6075ca92e18a15ce0e8ecaaae57a112072844045d11beeb264aac5f85e0daf2835f0151610b2f565b5061060e7fe25ff801c3c463dad5f8999289b7b43090e0f6f5039ae7c220cbb762fe8ff373835f0151610b2f565b507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc3975050505b83156106965784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050919050565b7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a8214806106ed57507f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a4882145b156109b6575f805f7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a850361074d575f848060200190518101906107319190611536565b9050805f01519350806020015192508060600151915050610779565b5f84806020019051810190610762919061162b565b805160208201516080909201519095509093509150505b80156109ae5773ffffffffffffffffffffffffffffffffffffffff83161580156107e6575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f96f78a99f93d631b75bc050854c9b764642c10564e41ed27c197a36ddabb1df9602052604090205460ff165b80610853575073ffffffffffffffffffffffffffffffffffffffff8216158015610853575073ffffffffffffffffffffffffffffffffffffffff83165f9081527f3907f76fa0fb1e5d0f263c5c4fe4316026052cf960c55a1c768106d8b9701c10602052604090205460ff165b1561086057505050505050565b7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a851480156108d2575073ffffffffffffffffffffffffffffffffffffffff86165f9081527f6ba48721fcbb2613af13d8285fe9ee4a081f7995464037bb5ea27397912881d2602052604090205460ff165b8061094a57507f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a488514801561094a575073ffffffffffffffffffffffffffffffffffffffff86165f9081527f29e42896fa6edf5a5d7ff0bcd00acffbece6eb6cc7b44d0807bfd84929cc6e1b602052604090205460ff165b1561095757505050505050565b6040517ffe720f7800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8085166004830152831660248201526044015b60405180910390fd5b505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205460ff1615610a1157505050565b8282826040517f3ae4063b0000000000000000000000000000000000000000000000000000000081526004016109a5939291906116ed565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a8281610b22565b61031c8383610c4d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102d357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146102d3565b610b2c813361119a565b50565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16610c44575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610be03390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506102d3565b5f9150506102d3565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615610c44575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506102d3565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006102d3565b5f610d5a611244565b815173ffffffffffffffffffffffffffffffffffffffff16610da8576040517fd264eed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610df27f50a07cb25d0d864370863300b20987dfdae089abad71b607faf639d09d0533917f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b6110f9565b610e1c7f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b806110f9565b610e667f3dd35eca0ca8a128757fa464a5dfa4ad6cc4853cad96dce4e90fdbea4f0a52e37f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d6110f9565b610e907f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d806110f9565b610eda7f54f0af3716c79b30b8c228679d31d77a1a5f526c16af3262730e0a8de4363fed7fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c6110f9565b610f047fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c806110f9565b610f4e7f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8217f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc026110f9565b610f787f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc02806110f9565b610fc27f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e9828697fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d36110f9565b610fec7fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d3806110f9565b6110197f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b835f0151610b2f565b506110477f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d835f0151610b2f565b506110757fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c835f0151610b2f565b506110a37f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc02835f0151610b2f565b506110d17fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d3835f0151610b2f565b507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc392915050565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268005f611152845f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b5f85815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611240576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016109a5565b5050565b61124c61124e565b565b61125661128c565b61124c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611295610d29565b5468010000000000000000900460ff16919050565b5f602082840312156112ba575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146112e9575f80fd5b9392505050565b5f60208284031215611300575f80fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610b2c575f80fd5b5f8060408385031215611339575f80fd5b82359150602083013561134b81611307565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160a0810167ffffffffffffffff811182821017156113a6576113a6611356565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156113d5576113d5611356565b604052919050565b5f82601f8301126113ec575f80fd5b813567ffffffffffffffff81111561140657611406611356565b6114196020601f19601f840116016113ac565b81815284602083860101111561142d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215611459575f80fd5b813567ffffffffffffffff81111561146f575f80fd5b61147b848285016113dd565b949350505050565b5f805f60608486031215611495575f80fd5b83356114a081611307565b925060208401359150604084013567ffffffffffffffff8111156114c2575f80fd5b6114ce868287016113dd565b9150509250925092565b5f602082840312156114e8575f80fd5b6040516020810181811067ffffffffffffffff8211171561150b5761150b611356565b604052825161151981611307565b81529392505050565b80518015158114611531575f80fd5b919050565b5f60808284031215611546575f80fd5b6040516080810181811067ffffffffffffffff8211171561156957611569611356565b604052825161157781611307565b8152602083015161158781611307565b6020820152604083810151908201526115a260608401611522565b60608201529392505050565b5f82601f8301126115bd575f80fd5b8151602067ffffffffffffffff8211156115d9576115d9611356565b8160051b6115e88282016113ac565b9283528481018201928281019087851115611601575f80fd5b83870192505b8483101561162057825182529183019190830190611607565b979650505050505050565b5f6020828403121561163b575f80fd5b815167ffffffffffffffff80821115611652575f80fd5b9083019060a08286031215611665575f80fd5b61166d611383565b825161167881611307565b8152602083015161168881611307565b602082015260408301518281111561169e575f80fd5b6116aa878286016115ae565b6040830152506060830151828111156116c1575f80fd5b6116cd878286016115ae565b6060830152506116df60808401611522565b608082015295945050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201525f82518060608401528060208501608085015e5f608082850101526080601f19601f83011684010191505094935050505056"; + hex"608060405234801561000f575f80fd5b506004361061009f575f3560e01c8063439fab911161007257806391d148541161005857806391d1485414610168578063a217fddf146101bf578063d547741f146101c6575f80fd5b8063439fab911461014257806359f89dda14610155575f80fd5b806301ffc9a7146100a3578063248a9ca3146100cb5780632f2ff15d1461011a57806336568abe1461012f575b5f80fd5b6100b66100b136600461114b565b6101d9565b60405190151581526020015b60405180910390f35b61010c6100d9366004611191565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016100c2565b61012d6101283660046111bc565b6102cc565b005b61012d61013d3660046111bc565b610315565b61010c6101503660046112dd565b610366565b61012d610163366004611317565b61065a565b6100b66101763660046111bc565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61010c5f81565b61012d6101d43660046111bc565b61099b565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f59f89dda00000000000000000000000000000000000000000000000000000000148061026b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f439fab9100000000000000000000000000000000000000000000000000000000145b806102b757507fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000145b806102c657506102c6826109de565b92915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461030581610a74565b61030f8383610a81565b50505050565b6001600160a01b0381163314610357576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103618282610b4d565b505050565b5f80610370610bf1565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f8115801561039c5750825b90505f8267ffffffffffffffff1660011480156103b85750303b155b9050811580156103c6575080155b156103fd576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561044857845468ff00000000000000001916680100000000000000001785555b5f8780602001905181019061045d919061136c565b90505f61046982610c19565b90507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc3811461049b5796506106059050565b6104e57ffc0b9a47b723baf66339577301d13949cab2da29c3baeaa9cfc1f36c513e8f897fd6075ca92e18a15ce0e8ecaaae57a112072844045d11beeb264aac5f85e0daf2610fb4565b61050f7fd6075ca92e18a15ce0e8ecaaae57a112072844045d11beeb264aac5f85e0daf280610fb4565b6105597f921a3c774c4abecc1bddc4f7beb397fdb2cde7806021d9571086abb74cd023e77fe25ff801c3c463dad5f8999289b7b43090e0f6f5039ae7c220cbb762fe8ff373610fb4565b6105837fe25ff801c3c463dad5f8999289b7b43090e0f6f5039ae7c220cbb762fe8ff37380610fb4565b6105b07fd6075ca92e18a15ce0e8ecaaae57a112072844045d11beeb264aac5f85e0daf2835f0151610a81565b506105de7fe25ff801c3c463dad5f8999289b7b43090e0f6f5039ae7c220cbb762fe8ff373835f0151610a81565b507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc3975050505b831561065057845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050919050565b7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a8214806106a757507f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a4882145b15610915575f805f7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a8503610707575f848060200190518101906106eb91906113ca565b9050805f01519350806020015192508060600151915050610733565b5f8480602001905181019061071c91906114bf565b805160208201516080909201519095509093509150505b801561090d576001600160a01b03831615801561078657506001600160a01b0382165f9081527f96f78a99f93d631b75bc050854c9b764642c10564e41ed27c197a36ddabb1df9602052604090205460ff165b806107d957506001600160a01b0382161580156107d957506001600160a01b0383165f9081527f3907f76fa0fb1e5d0f263c5c4fe4316026052cf960c55a1c768106d8b9701c10602052604090205460ff165b156107e657505050505050565b7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a8514801561084b57506001600160a01b0386165f9081527f6ba48721fcbb2613af13d8285fe9ee4a081f7995464037bb5ea27397912881d2602052604090205460ff165b806108b657507f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a48851480156108b657506001600160a01b0386165f9081527f29e42896fa6edf5a5d7ff0bcd00acffbece6eb6cc7b44d0807bfd84929cc6e1b602052604090205460ff165b156108c357505050505050565b6040517ffe720f780000000000000000000000000000000000000000000000000000000081526001600160a01b038085166004830152831660248201526044015b60405180910390fd5b505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038716845290915290205460ff161561096357505050565b8282826040517f3ae4063b00000000000000000000000000000000000000000000000000000000815260040161090493929190611581565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546109d481610a74565b61030f8383610b4d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102c657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146102c6565b610a7e8133611055565b50565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16610b44575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610afa3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506102c6565b5f9150506102c6565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615610b44575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506102c6565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006102c6565b5f610c226110e5565b81516001600160a01b0316610c63576040517fd264eed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cad7f50a07cb25d0d864370863300b20987dfdae089abad71b607faf639d09d0533917f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b610fb4565b610cd77f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b80610fb4565b610d217f3dd35eca0ca8a128757fa464a5dfa4ad6cc4853cad96dce4e90fdbea4f0a52e37f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d610fb4565b610d4b7f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d80610fb4565b610d957f54f0af3716c79b30b8c228679d31d77a1a5f526c16af3262730e0a8de4363fed7fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c610fb4565b610dbf7fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c80610fb4565b610e097f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8217f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc02610fb4565b610e337f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc0280610fb4565b610e7d7f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e9828697fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d3610fb4565b610ea77fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d380610fb4565b610ed47f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b835f0151610a81565b50610f027f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d835f0151610a81565b50610f307fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c835f0151610a81565b50610f5e7f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc02835f0151610a81565b50610f8c7fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d3835f0151610a81565b507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc392915050565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268005f61100d845f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b5f85815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166110e1576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610904565b5050565b6110ed6110ef565b565b6110f761112d565b6110ed576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611136610bf1565b5468010000000000000000900460ff16919050565b5f6020828403121561115b575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461118a575f80fd5b9392505050565b5f602082840312156111a1575f80fd5b5035919050565b6001600160a01b0381168114610a7e575f80fd5b5f80604083850312156111cd575f80fd5b8235915060208301356111df816111a8565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160a0810167ffffffffffffffff8111828210171561123a5761123a6111ea565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611269576112696111ea565b604052919050565b5f82601f830112611280575f80fd5b813567ffffffffffffffff81111561129a5761129a6111ea565b6112ad6020601f19601f84011601611240565b8181528460208386010111156112c1575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156112ed575f80fd5b813567ffffffffffffffff811115611303575f80fd5b61130f84828501611271565b949350505050565b5f805f60608486031215611329575f80fd5b8335611334816111a8565b925060208401359150604084013567ffffffffffffffff811115611356575f80fd5b61136286828701611271565b9150509250925092565b5f6020828403121561137c575f80fd5b6040516020810181811067ffffffffffffffff8211171561139f5761139f6111ea565b60405282516113ad816111a8565b81529392505050565b805180151581146113c5575f80fd5b919050565b5f608082840312156113da575f80fd5b6040516080810181811067ffffffffffffffff821117156113fd576113fd6111ea565b604052825161140b816111a8565b8152602083015161141b816111a8565b602082015260408381015190820152611436606084016113b6565b60608201529392505050565b5f82601f830112611451575f80fd5b8151602067ffffffffffffffff82111561146d5761146d6111ea565b8160051b61147c828201611240565b9283528481018201928281019087851115611495575f80fd5b83870192505b848310156114b45782518252918301919083019061149b565b979650505050505050565b5f602082840312156114cf575f80fd5b815167ffffffffffffffff808211156114e6575f80fd5b9083019060a082860312156114f9575f80fd5b611501611217565b825161150c816111a8565b8152602083015161151c816111a8565b6020820152604083015182811115611532575f80fd5b61153e87828601611442565b604083015250606083015182811115611555575f80fd5b61156187828601611442565b606083015250611573608084016113b6565b608082015295945050505050565b6001600160a01b0384168152826020820152606060408201525f82518060608401528060208501608085015e5f608082850101526080601f19601f83011684010191505094935050505056"; diff --git a/src/generated/candidate/StoxOffchainAssetReceiptVaultBeaconSetDeployer.pointers.sol b/src/generated/candidate/StoxOffchainAssetReceiptVaultBeaconSetDeployer.pointers.sol index 31a0f1ac..beb01ba4 100644 --- a/src/generated/candidate/StoxOffchainAssetReceiptVaultBeaconSetDeployer.pointers.sol +++ b/src/generated/candidate/StoxOffchainAssetReceiptVaultBeaconSetDeployer.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x4637b099fe9279a8d4d88d9176ccadf92b20970eaf0b57b51997756d479ef43b); +bytes32 constant BYTECODE_HASH = bytes32(0x6b2699420a64c92fc4f8a027a5769d0a27291e4489eaeb0e185cb660bf49d42f); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x679ab223dAb158Ea93e1a4F49104DE436C58eAb8); +address constant DEPLOYED_ADDRESS = address(0x59aFE8ae48De65D9916b99C8CF9977061955C9A7); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"60c060405234801561000f575f80fd5b5060408051606081018252738e4bdeec7ceb9570d440676345da1dce10329f5b808252732df5cfe6d688ef9ff1b7c59a499d254b1527b2866020830181905273d7f91c1c6e6e651ec3f1fd707af7cbb7526206e18385015292519192916100759061010b565b6001600160a01b03928316815291166020820152604001604051809103905ff0801580156100a5573d5f803e3d5ffd5b506001600160a01b0316608052604080820151825191519091906100c89061010b565b6001600160a01b03928316815291166020820152604001604051809103905ff0801580156100f8573d5f803e3d5ffd5b506001600160a01b031660a05250610118565b6104f780610fd783390190565b60805160a051610e926101455f395f818160c701526102d801525f8181607b01526102630152610e925ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461004e5780632c9b7f40146100765780632f77a1c1146100c25780634904fab3146100e9575b5f80fd5b61006161005c3660046105d0565b6100fc565b60405190151581526020015b60405180910390f35b61009d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161006d565b61009d7f000000000000000000000000000000000000000000000000000000000000000081565b61009d6100f736600461075e565b610194565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f4ae8243200000000000000000000000000000000000000000000000000000000148061018e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6020810151606001515f9073ffffffffffffffffffffffffffffffffffffffff1615610212576020820151606001516040517ffc47d97600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240160405180910390fd5b815173ffffffffffffffffffffffffffffffffffffffff16610260576040517fd264eed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000060405161028e906105c3565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f90820152606001604051809103905ff0801580156102d2573d5f803e3d5ffd5b5090505f7f0000000000000000000000000000000000000000000000000000000000000000604051610303906105c3565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f90820152606001604051809103905ff080158015610347573d5f803e3d5ffd5b506040805173ffffffffffffffffffffffffffffffffffffffff80841660208301529293507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc39285169163439fab9191016040516020818303038152906040526040518263ffffffff1660e01b81526004016103c39190610894565b6020604051808303815f875af11580156103df573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061040391906108a6565b1461043a576040517f0219069c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8184602001516060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc38173ffffffffffffffffffffffffffffffffffffffff1663439fab91866040516020016104c491906108bd565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016104ef9190610894565b6020604051808303815f875af115801561050b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061052f91906108a6565b14610566576040517f09c5931500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805133815273ffffffffffffffffffffffffffffffffffffffff838116602083015284168183015290517fa0d99d93cf7a5f89661fa0829369a7e4896e755871efe65440bab2429387d55b9181900360600190a19392505050565b61052f8061096383390190565b5f602082840312156105e0575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461060f575f80fd5b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff8111828210171561066657610666610616565b60405290565b6040516080810167ffffffffffffffff8111828210171561066657610666610616565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b2575f80fd5b919050565b5f82601f8301126106c6575f80fd5b813567ffffffffffffffff808211156106e1576106e1610616565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561072757610727610616565b8160405283815286602085880101111561073f575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f6020828403121561076e575f80fd5b813567ffffffffffffffff80821115610785575f80fd5b9083019060408286031215610798575f80fd5b6107a0610643565b6107a98361068f565b81526020830135828111156107bc575f80fd5b9290920191608083870312156107d0575f80fd5b6107d861066c565b6107e18461068f565b81526020840135838111156107f4575f80fd5b610800888287016106b7565b602083015250604084013583811115610817575f80fd5b610823888287016106b7565b6040830152506108356060850161068f565b6060820152602082015295945050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61060f6020830184610848565b5f602082840312156108b6575f80fd5b5051919050565b602081525f73ffffffffffffffffffffffffffffffffffffffff8084511660208401526020840151604080850152818151166060850152602081015160808086015261090c60e0860182610848565b905060408201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08683030160a08701526109478282610848565b9150508260608301511660c08601528093505050509291505056fe60a060405260405161052f38038061052f83398101604081905261002291610331565b61002c828261003e565b506001600160a01b031660805261040d565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906103ed565b82610209565b505050565b6100f76102aa565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d291906103ed565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f61021684846102cb565b905080801561023757505f3d118061023757505f846001600160a01b03163b115b1561024c576102446102de565b9150506102a4565b801561027657604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b3d15610289576102846102f7565b6102a2565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156102c95760405163b398979f60e01b815260040160405180910390fd5b565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b80516001600160a01b0381168114610318575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610342575f80fd5b61034b83610302565b60208401519092506001600160401b0380821115610367575f80fd5b818501915085601f83011261037a575f80fd5b81518181111561038c5761038c61031d565b604051601f8201601f19908116603f011681019083821181831017156103b4576103b461031d565b816040528281528860208487010111156103cc575f80fd5b8260208601602083015e5f6020848301015280955050505050509250929050565b5f602082840312156103fd575f80fd5b61040682610302565b9392505050565b60805161010b6104245f395f6023015261010b5ff3fe608060405261000c61000e565b005b61001e610019610020565b6100b3565b565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ae91906100d1565b905090565b365f80375f80365f845af43d5f803e8080156100cd573d5ff35b3d5ffd5b5f602082840312156100e1575f80fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610104575f80fd5b939250505056608060405234801561000f575f80fd5b506040516104f73803806104f783398101604081905261002e9161015f565b806001600160a01b03811661005d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61006681610077565b50610070826100c6565b5050610190565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b5f036100fb5760405163211eb15960e21b81526001600160a01b0382166004820152602401610054565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b80516001600160a01b038116811461015a575f80fd5b919050565b5f8060408385031215610170575f80fd5b61017983610144565b915061018760208401610144565b90509250929050565b61035a8061019d5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063715018a61161004d578063715018a6146100c05780638da5cb5b146100c8578063f2fde38b146100e5575f80fd5b80633659cfe6146100685780635c60da1b1461007d575b5f80fd5b61007b610076366004610320565b6100f8565b005b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61007b61010c565b5f5473ffffffffffffffffffffffffffffffffffffffff16610097565b61007b6100f3366004610320565b61011f565b610100610184565b610109816101d6565b50565b610114610184565b61011d5f6102ac565b565b610127610184565b73ffffffffffffffffffffffffffffffffffffffff811661017b576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b610109816102ac565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461011d576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610172565b8073ffffffffffffffffffffffffffffffffffffffff163b5f0361023e576040517f847ac56400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610172565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610330575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610353575f80fd5b939250505056"; + hex"60c060405234801561000f575f80fd5b5060408051606081018252738e4bdeec7ceb9570d440676345da1dce10329f5b80825273b092f127bd44f19bfa96e78db4beaf1066d2914e602083018190527352174538a83b18462c5cf898016539b086c920c78385015292519192916100759061010b565b6001600160a01b03928316815291166020820152604001604051809103905ff0801580156100a5573d5f803e3d5ffd5b506001600160a01b0316608052604080820151825191519091906100c89061010b565b6001600160a01b03928316815291166020820152604001604051809103905ff0801580156100f8573d5f803e3d5ffd5b506001600160a01b031660a05250610118565b61047580610ef283390190565b60805160a051610dad6101455f395f818160ba015261029701525f8181607b015261022f0152610dad5ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461004e5780632c9b7f40146100765780632f77a1c1146100b55780634904fab3146100dc575b5f80fd5b61006161005c366004610541565b6100ef565b60405190151581526020015b60405180910390f35b61009d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161006d565b61009d7f000000000000000000000000000000000000000000000000000000000000000081565b61009d6100ea3660046106a4565b610187565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f4ae8243200000000000000000000000000000000000000000000000000000000148061018157507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6020810151606001515f906001600160a01b0316156101eb576020820151606001516040517ffc47d9760000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260240160405180910390fd5b81516001600160a01b031661022c576040517fd264eed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000060405161025a90610534565b6001600160a01b0390911681526040602082018190525f90820152606001604051809103905ff080158015610291573d5f803e3d5ffd5b5090505f7f00000000000000000000000000000000000000000000000000000000000000006040516102c290610534565b6001600160a01b0390911681526040602082018190525f90820152606001604051809103905ff0801580156102f9573d5f803e3d5ffd5b50604080516001600160a01b0380841660208301529293507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc39285169163439fab9191016040516020818303038152906040526040518263ffffffff1660e01b815260040161036891906107bc565b6020604051808303815f875af1158015610384573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103a891906107ce565b146103df576040517f0219069c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818460200151606001906001600160a01b031690816001600160a01b0316815250507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc3816001600160a01b031663439fab918660405160200161044291906107e5565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161046d91906107bc565b6020604051808303815f875af1158015610489573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ad91906107ce565b146104e4576040517f09c5931500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513381526001600160a01b03838116602083015284168183015290517fa0d99d93cf7a5f89661fa0829369a7e4896e755871efe65440bab2429387d55b9181900360600190a19392505050565b61052f8061087e83390190565b5f60208284031215610551575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610580575f80fd5b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156105d7576105d7610587565b60405290565b6040516080810167ffffffffffffffff811182821017156105d7576105d7610587565b80356001600160a01b0381168114610616575f80fd5b919050565b5f82601f83011261062a575f80fd5b813567ffffffffffffffff8082111561064557610645610587565b604051601f8301601f19908116603f0116810190828211818310171561066d5761066d610587565b81604052838152866020858801011115610685575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f602082840312156106b4575f80fd5b813567ffffffffffffffff808211156106cb575f80fd5b90830190604082860312156106de575f80fd5b6106e66105b4565b6106ef83610600565b8152602083013582811115610702575f80fd5b929092019160808387031215610716575f80fd5b61071e6105dd565b61072784610600565b815260208401358381111561073a575f80fd5b6107468882870161061b565b60208301525060408401358381111561075d575f80fd5b6107698882870161061b565b60408301525061077b60608501610600565b6060820152602082015295945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610580602083018461078e565b5f602082840312156107de575f80fd5b5051919050565b602081525f6001600160a01b038084511660208401526020840151604080850152818151166060850152602081015160808086015261082760e086018261078e565b905060408201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08683030160a0870152610862828261078e565b9150508260608301511660c08601528093505050509291505056fe60a060405260405161052f38038061052f83398101604081905261002291610331565b61002c828261003e565b506001600160a01b031660805261040d565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906103ed565b82610209565b505050565b6100f76102aa565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d291906103ed565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f61021684846102cb565b905080801561023757505f3d118061023757505f846001600160a01b03163b115b1561024c576102446102de565b9150506102a4565b801561027657604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b3d15610289576102846102f7565b6102a2565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156102c95760405163b398979f60e01b815260040160405180910390fd5b565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b80516001600160a01b0381168114610318575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610342575f80fd5b61034b83610302565b60208401519092506001600160401b0380821115610367575f80fd5b818501915085601f83011261037a575f80fd5b81518181111561038c5761038c61031d565b604051601f8201601f19908116603f011681019083821181831017156103b4576103b461031d565b816040528281528860208487010111156103cc575f80fd5b8260208601602083015e5f6020848301015280955050505050509250929050565b5f602082840312156103fd575f80fd5b61040682610302565b9392505050565b60805161010b6104245f395f6023015261010b5ff3fe608060405261000c61000e565b005b61001e610019610020565b6100b3565b565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ae91906100d1565b905090565b365f80375f80365f845af43d5f803e8080156100cd573d5ff35b3d5ffd5b5f602082840312156100e1575f80fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610104575f80fd5b939250505056608060405234801561000f575f80fd5b5060405161047538038061047583398101604081905261002e9161015f565b806001600160a01b03811661005d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61006681610077565b50610070826100c6565b5050610190565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b5f036100fb5760405163211eb15960e21b81526001600160a01b0382166004820152602401610054565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b80516001600160a01b038116811461015a575f80fd5b919050565b5f8060408385031215610170575f80fd5b61017983610144565b915061018760208401610144565b90509250929050565b6102d88061019d5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063715018a61161004d578063715018a6146100a65780638da5cb5b146100ae578063f2fde38b146100be575f80fd5b80633659cfe6146100685780635c60da1b1461007d575b5f80fd5b61007b6100763660046102ab565b6100d1565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61007b6100e5565b5f546001600160a01b031661008a565b61007b6100cc3660046102ab565b6100f8565b6100d9610150565b6100e281610195565b50565b6100ed610150565b6100f65f610244565b565b610100610150565b6001600160a01b038116610147576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b6100e281610244565b5f546001600160a01b031633146100f6576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161013e565b806001600160a01b03163b5f036101e3576040517f847ac5640000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161013e565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156102bb575f80fd5b81356001600160a01b03811681146102d1575f80fd5b939250505056"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461004e5780632c9b7f40146100765780632f77a1c1146100c25780634904fab3146100e9575b5f80fd5b61006161005c3660046105d0565b6100fc565b60405190151581526020015b60405180910390f35b61009d7f000000000000000000000000913f9edb29dd88314ee1559c18495b5332464d3b81565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161006d565b61009d7f000000000000000000000000bc924b1c3d3f3e038d5bf85710f695bcb22e715281565b61009d6100f736600461075e565b610194565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f4ae8243200000000000000000000000000000000000000000000000000000000148061018e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6020810151606001515f9073ffffffffffffffffffffffffffffffffffffffff1615610212576020820151606001516040517ffc47d97600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240160405180910390fd5b815173ffffffffffffffffffffffffffffffffffffffff16610260576040517fd264eed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000913f9edb29dd88314ee1559c18495b5332464d3b60405161028e906105c3565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f90820152606001604051809103905ff0801580156102d2573d5f803e3d5ffd5b5090505f7f000000000000000000000000bc924b1c3d3f3e038d5bf85710f695bcb22e7152604051610303906105c3565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f90820152606001604051809103905ff080158015610347573d5f803e3d5ffd5b506040805173ffffffffffffffffffffffffffffffffffffffff80841660208301529293507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc39285169163439fab9191016040516020818303038152906040526040518263ffffffff1660e01b81526004016103c39190610894565b6020604051808303815f875af11580156103df573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061040391906108a6565b1461043a576040517f0219069c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8184602001516060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc38173ffffffffffffffffffffffffffffffffffffffff1663439fab91866040516020016104c491906108bd565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016104ef9190610894565b6020604051808303815f875af115801561050b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061052f91906108a6565b14610566576040517f09c5931500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805133815273ffffffffffffffffffffffffffffffffffffffff838116602083015284168183015290517fa0d99d93cf7a5f89661fa0829369a7e4896e755871efe65440bab2429387d55b9181900360600190a19392505050565b61052f8061096383390190565b5f602082840312156105e0575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461060f575f80fd5b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff8111828210171561066657610666610616565b60405290565b6040516080810167ffffffffffffffff8111828210171561066657610666610616565b803573ffffffffffffffffffffffffffffffffffffffff811681146106b2575f80fd5b919050565b5f82601f8301126106c6575f80fd5b813567ffffffffffffffff808211156106e1576106e1610616565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561072757610727610616565b8160405283815286602085880101111561073f575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f6020828403121561076e575f80fd5b813567ffffffffffffffff80821115610785575f80fd5b9083019060408286031215610798575f80fd5b6107a0610643565b6107a98361068f565b81526020830135828111156107bc575f80fd5b9290920191608083870312156107d0575f80fd5b6107d861066c565b6107e18461068f565b81526020840135838111156107f4575f80fd5b610800888287016106b7565b602083015250604084013583811115610817575f80fd5b610823888287016106b7565b6040830152506108356060850161068f565b6060820152602082015295945050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61060f6020830184610848565b5f602082840312156108b6575f80fd5b5051919050565b602081525f73ffffffffffffffffffffffffffffffffffffffff8084511660208401526020840151604080850152818151166060850152602081015160808086015261090c60e0860182610848565b905060408201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08683030160a08701526109478282610848565b9150508260608301511660c08601528093505050509291505056fe60a060405260405161052f38038061052f83398101604081905261002291610331565b61002c828261003e565b506001600160a01b031660805261040d565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906103ed565b82610209565b505050565b6100f76102aa565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d291906103ed565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f61021684846102cb565b905080801561023757505f3d118061023757505f846001600160a01b03163b115b1561024c576102446102de565b9150506102a4565b801561027657604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b3d15610289576102846102f7565b6102a2565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156102c95760405163b398979f60e01b815260040160405180910390fd5b565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b80516001600160a01b0381168114610318575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610342575f80fd5b61034b83610302565b60208401519092506001600160401b0380821115610367575f80fd5b818501915085601f83011261037a575f80fd5b81518181111561038c5761038c61031d565b604051601f8201601f19908116603f011681019083821181831017156103b4576103b461031d565b816040528281528860208487010111156103cc575f80fd5b8260208601602083015e5f6020848301015280955050505050509250929050565b5f602082840312156103fd575f80fd5b61040682610302565b9392505050565b60805161010b6104245f395f6023015261010b5ff3fe608060405261000c61000e565b005b61001e610019610020565b6100b3565b565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ae91906100d1565b905090565b365f80375f80365f845af43d5f803e8080156100cd573d5ff35b3d5ffd5b5f602082840312156100e1575f80fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610104575f80fd5b939250505056"; + hex"608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461004e5780632c9b7f40146100765780632f77a1c1146100b55780634904fab3146100dc575b5f80fd5b61006161005c366004610541565b6100ef565b60405190151581526020015b60405180910390f35b61009d7f0000000000000000000000006dc55094e45f3556d4ea4e1c68990efddfdf9c3e81565b6040516001600160a01b03909116815260200161006d565b61009d7f0000000000000000000000009a731918ec03a2464958b992f469ae7f911a0b7481565b61009d6100ea3660046106a4565b610187565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f4ae8243200000000000000000000000000000000000000000000000000000000148061018157507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6020810151606001515f906001600160a01b0316156101eb576020820151606001516040517ffc47d9760000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260240160405180910390fd5b81516001600160a01b031661022c576040517fd264eed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f0000000000000000000000006dc55094e45f3556d4ea4e1c68990efddfdf9c3e60405161025a90610534565b6001600160a01b0390911681526040602082018190525f90820152606001604051809103905ff080158015610291573d5f803e3d5ffd5b5090505f7f0000000000000000000000009a731918ec03a2464958b992f469ae7f911a0b746040516102c290610534565b6001600160a01b0390911681526040602082018190525f90820152606001604051809103905ff0801580156102f9573d5f803e3d5ffd5b50604080516001600160a01b0380841660208301529293507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc39285169163439fab9191016040516020818303038152906040526040518263ffffffff1660e01b815260040161036891906107bc565b6020604051808303815f875af1158015610384573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103a891906107ce565b146103df576040517f0219069c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818460200151606001906001600160a01b031690816001600160a01b0316815250507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc3816001600160a01b031663439fab918660405160200161044291906107e5565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161046d91906107bc565b6020604051808303815f875af1158015610489573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ad91906107ce565b146104e4576040517f09c5931500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513381526001600160a01b03838116602083015284168183015290517fa0d99d93cf7a5f89661fa0829369a7e4896e755871efe65440bab2429387d55b9181900360600190a19392505050565b61052f8061087e83390190565b5f60208284031215610551575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610580575f80fd5b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156105d7576105d7610587565b60405290565b6040516080810167ffffffffffffffff811182821017156105d7576105d7610587565b80356001600160a01b0381168114610616575f80fd5b919050565b5f82601f83011261062a575f80fd5b813567ffffffffffffffff8082111561064557610645610587565b604051601f8301601f19908116603f0116810190828211818310171561066d5761066d610587565b81604052838152866020858801011115610685575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f602082840312156106b4575f80fd5b813567ffffffffffffffff808211156106cb575f80fd5b90830190604082860312156106de575f80fd5b6106e66105b4565b6106ef83610600565b8152602083013582811115610702575f80fd5b929092019160808387031215610716575f80fd5b61071e6105dd565b61072784610600565b815260208401358381111561073a575f80fd5b6107468882870161061b565b60208301525060408401358381111561075d575f80fd5b6107698882870161061b565b60408301525061077b60608501610600565b6060820152602082015295945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610580602083018461078e565b5f602082840312156107de575f80fd5b5051919050565b602081525f6001600160a01b038084511660208401526020840151604080850152818151166060850152602081015160808086015261082760e086018261078e565b905060408201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08683030160a0870152610862828261078e565b9150508260608301511660c08601528093505050509291505056fe60a060405260405161052f38038061052f83398101604081905261002291610331565b61002c828261003e565b506001600160a01b031660805261040d565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906103ed565b82610209565b505050565b6100f76102aa565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d291906103ed565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f61021684846102cb565b905080801561023757505f3d118061023757505f846001600160a01b03163b115b1561024c576102446102de565b9150506102a4565b801561027657604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b3d15610289576102846102f7565b6102a2565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156102c95760405163b398979f60e01b815260040160405180910390fd5b565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b80516001600160a01b0381168114610318575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610342575f80fd5b61034b83610302565b60208401519092506001600160401b0380821115610367575f80fd5b818501915085601f83011261037a575f80fd5b81518181111561038c5761038c61031d565b604051601f8201601f19908116603f011681019083821181831017156103b4576103b461031d565b816040528281528860208487010111156103cc575f80fd5b8260208601602083015e5f6020848301015280955050505050509250929050565b5f602082840312156103fd575f80fd5b61040682610302565b9392505050565b60805161010b6104245f395f6023015261010b5ff3fe608060405261000c61000e565b005b61001e610019610020565b6100b3565b565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ae91906100d1565b905090565b365f80375f80365f845af43d5f803e8080156100cd573d5ff35b3d5ffd5b5f602082840312156100e1575f80fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610104575f80fd5b939250505056"; diff --git a/src/generated/candidate/StoxOffchainAssetReceiptVaultPaymentMintAuthorizerV1.pointers.sol b/src/generated/candidate/StoxOffchainAssetReceiptVaultPaymentMintAuthorizerV1.pointers.sol index f343350f..70aaa555 100644 --- a/src/generated/candidate/StoxOffchainAssetReceiptVaultPaymentMintAuthorizerV1.pointers.sol +++ b/src/generated/candidate/StoxOffchainAssetReceiptVaultPaymentMintAuthorizerV1.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x4d94318cde48f1bc20f97e00aefad84bfb7c9db15c81b882862e127b05e06e15); +bytes32 constant BYTECODE_HASH = bytes32(0xcec4a4eeef4c556bcc097009183fccb9a8dbcf04adbe8aef6e4d3de799ef2cd6); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0xeaD68E489Cb19453b294dc46a3A5710b0d46d17F); +address constant DEPLOYED_ADDRESS = address(0x4210D9a811925dD60bdCA703b3862a7251B9C0f1); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b506015601f565b601b601f565b60cf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615606e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460cc5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b612650806100dc5f395ff3fe608060405234801561000f575f80fd5b5060043610610115575f3560e01c806359f89dda116100ad578063a086e1751161007d578063a4c9d30011610063578063a4c9d3001461030a578063d547741f14610312578063f2fde38b14610325575f80fd5b8063a086e175146102fb578063a217fddf14610303575f80fd5b806359f89dda14610281578063715018a6146102945780638da5cb5b1461029c57806391d14854146102a4575f80fd5b80633013ce29116100e85780633013ce29146101c8578063325cd7961461020c57806336568abe1461025b578063439fab911461026e575f80fd5b806301ffc9a71461011957806304a0db2014610141578063248a9ca3146101725780632f2ff15d146101b3575b5f80fd5b61012c610127366004611eec565b610338565b60405190151581526020015b60405180910390f35b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b3202545b604051908152602001610138565b610164610180366004611f2b565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6101c66101c1366004611f56565b61042b565b005b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b3201546001600160a01b03165b6040516001600160a01b039091168152602001610138565b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b32015474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610138565b6101c6610269366004611f56565b610474565b61016461027c3660046120a7565b6104c5565b6101c661028f3660046120d9565b610a55565b6101c6610e31565b6101f4610e44565b61012c6102b2366004611f56565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101f4610e78565b6101645f81565b6101c6610ea0565b6101c6610320366004611f56565b610f69565b6101c661033336600461212e565b610fac565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f59f89dda0000000000000000000000000000000000000000000000000000000014806103ca57507fffffffff0000000000000000000000000000000000000000000000000000000082167f439fab9100000000000000000000000000000000000000000000000000000000145b8061041657507fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000145b80610425575061042582610fff565b92915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461046481611095565b61046e838361109f565b50505050565b6001600160a01b03811633146104b6576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104c08282611190565b505050565b5f806104cf611252565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156104fb5750825b90505f8267ffffffffffffffff1660011480156105175750303b155b905081158015610525575080155b1561055c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156105bd5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b5f878060200190518101906105d29190612149565b80519091506001600160a01b0316610616576040517fa7d26c7300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516001600160a01b031661065a576040517f364467d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408101516001600160a01b031661069e576040517f3731597600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608101516001600160a01b03166106e2576040517ff10d418200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80608001515f0361071f576040517f7e0eb2bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80517f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b320080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b039384161782556020808501517f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b32038054841691861691909117905560608501517f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b320180549093169416938417909155604080517f313ce567000000000000000000000000000000000000000000000000000000008152905192935f93909263313ce56792600480820193918290030181865afa158015610830573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085491906121ba565b6001830180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff8416021790556080840151600284015560408401519091506108b59061127a565b7fbf322f47f534976d35baa3292f4fd04bf379264783a734383401b0e6e51cb16d835f0151846020015185604001518660600151858860800151604051610939969594939291906001600160a01b039687168152948616602086015292851660408501529316606083015260ff92909216608082015260a081019190915260c00190565b60405180910390a1610965604051806020016040528085604001516001600160a01b031681525061128b565b506109947f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc028460400151611190565b506109c37fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d38460400151611190565b507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc398505050508315610a4b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050919050565b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b320080546001600160a01b0316338114610ac9578484846040517f3ae4063b000000000000000000000000000000000000000000000000000000008152600401610ac0939291906121da565b60405180910390fd5b7f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8218403610e1f575f83806020019051810190610b059190612226565b60018481015460808301519293506001600160a01b038116927401000000000000000000000000000000000000000090910460ff16915f91610b48918490611626565b90505f836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bab91906121ba565b60ff169050828114610bf3576040517fe420d7af0000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610ac0565b5f866001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c549190612312565b90508760020154811115610ca45760028801546040517f86529caa000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604401610ac0565b825f03610d045785516040517f3ae4063b000000000000000000000000000000000000000000000000000000008152610ac091907f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f821908c906004016121da565b8551610d1c906001600160a01b0387169030866116ad565b600388015486516040517fdb8554fc0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201524260248201525f92919091169063db8554fc90604401602060405180830381865afa158015610d8a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dae9190612312565b905060028114610e115786516040517f3ae4063b000000000000000000000000000000000000000000000000000000008152610ac091907f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f821908d906004016121da565b505050505050505050505050565b610e2a8585856116fc565b5050505050565b610e39611a38565b610e425f611a83565b565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b5f807f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b3200610e68565b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b3200610f66610ecc610e44565b60018301546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610f2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f519190612312565b60018401546001600160a01b03169190611b0b565b50565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610fa281611095565b61046e8383611190565b610fb4611a38565b6001600160a01b038116610ff6576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610ac0565b610f6681611a83565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061042557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610425565b610f668133611b59565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611180575f848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556111363390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610425565b5f915050610425565b5092915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611180575f848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610425565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610425565b611282611be9565b610f6681611c27565b5f611294611c2f565b81516001600160a01b03166112d5576040517fd264eed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61131f7f50a07cb25d0d864370863300b20987dfdae089abad71b607faf639d09d0533917f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b611c37565b6113497f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b80611c37565b6113937f3dd35eca0ca8a128757fa464a5dfa4ad6cc4853cad96dce4e90fdbea4f0a52e37f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d611c37565b6113bd7f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d80611c37565b6114077f54f0af3716c79b30b8c228679d31d77a1a5f526c16af3262730e0a8de4363fed7fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c611c37565b6114317fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c80611c37565b61147b7f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8217f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc02611c37565b6114a57f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc0280611c37565b6114ef7f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e9828697fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d3611c37565b6115197fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d380611c37565b6115467f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b835f015161109f565b506115747f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d835f015161109f565b506115a27fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c835f015161109f565b506115d07f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc02835f015161109f565b506115fe7fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d3835f015161109f565b507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc392915050565b5f826012111561165a5760128390036001831615611650576116488582611cd8565b9150506116a6565b6116488582611d24565b60128311156116a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee83016002831615611699576116488582611d4e565b6116488582611d9e565b50825b9392505050565b6116bb848484846001611dcd565b61046e576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610ac0565b7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a82148061174957507f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a4882145b156119b2575f805f7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a85036117a9575f8480602001905181019061178d919061233d565b9050805f015193508060200151925080606001519150506117d5565b5f848060200190518101906117be9190612432565b805160208201516080909201519095509093509150505b80156119aa576001600160a01b03831615801561182857506001600160a01b0382165f9081527f96f78a99f93d631b75bc050854c9b764642c10564e41ed27c197a36ddabb1df9602052604090205460ff165b8061187b57506001600160a01b03821615801561187b57506001600160a01b0383165f9081527f3907f76fa0fb1e5d0f263c5c4fe4316026052cf960c55a1c768106d8b9701c10602052604090205460ff165b1561188857505050505050565b7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a851480156118ed57506001600160a01b0386165f9081527f6ba48721fcbb2613af13d8285fe9ee4a081f7995464037bb5ea27397912881d2602052604090205460ff165b8061195857507f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a488514801561195857506001600160a01b0386165f9081527f29e42896fa6edf5a5d7ff0bcd00acffbece6eb6cc7b44d0807bfd84929cc6e1b602052604090205460ff165b1561196557505050505050565b6040517ffe720f780000000000000000000000000000000000000000000000000000000081526001600160a01b03808516600483015283166024820152604401610ac0565b505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038716845290915290205460ff1615611a0057505050565b8282826040517f3ae4063b000000000000000000000000000000000000000000000000000000008152600401610ac0939291906121da565b33611a41610e44565b6001600160a01b031614610e42576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610ac0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b611b188383836001611e53565b6104c0576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610ac0565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611be5576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610ac0565b5050565b611bf1611ece565b610e42576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fb4611be9565b610e42611be9565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268005f611c90845f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b5f85815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b5f604e8210611cfa578215611cee576001611cf0565b5f5b60ff169050610425565b600a82900a808481611d0e57611d0e6124f4565b0491508082028414611189575060010192915050565b5f604e821015611d465781600a0a8381611d4057611d406124f4565b046116a6565b5f9392505050565b5f604e8210611d6d578215611d64575f19611d66565b5f5b9050610425565b50600a81900a8281029083818381611d8757611d876124f4565b0414611d94575f19611d96565b815b949350505050565b600a81900a611dad818461254e565b9050604e8210610425578215611d4657611dc882600a612645565b6116a6565b6040517f23b872dd000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f51148316611e42578383151615611e36573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316611ec2578383151615611eb6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f611ed7611252565b5468010000000000000000900460ff16919050565b5f60208284031215611efc575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146116a6575f80fd5b5f60208284031215611f3b575f80fd5b5035919050565b6001600160a01b0381168114610f66575f80fd5b5f8060408385031215611f67575f80fd5b823591506020830135611f7981611f42565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160a0810167ffffffffffffffff81118282101715611fd457611fd4611f84565b60405290565b60405160c0810167ffffffffffffffff81118282101715611fd457611fd4611f84565b604051601f8201601f1916810167ffffffffffffffff8111828210171561202657612026611f84565b604052919050565b5f67ffffffffffffffff82111561204757612047611f84565b50601f01601f191660200190565b5f82601f830112612064575f80fd5b81356120776120728261202e565b611ffd565b81815284602083860101111561208b575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156120b7575f80fd5b813567ffffffffffffffff8111156120cd575f80fd5b611d9684828501612055565b5f805f606084860312156120eb575f80fd5b83356120f681611f42565b925060208401359150604084013567ffffffffffffffff811115612118575f80fd5b61212486828701612055565b9150509250925092565b5f6020828403121561213e575f80fd5b81356116a681611f42565b5f60a08284031215612159575f80fd5b612161611fb1565b825161216c81611f42565b8152602083015161217c81611f42565b6020820152604083015161218f81611f42565b604082015260608301516121a281611f42565b60608201526080928301519281019290925250919050565b5f602082840312156121ca575f80fd5b815160ff811681146116a6575f80fd5b6001600160a01b0384168152826020820152606060408201525f82518060608401528060208501608085015e5f608082850101526080601f19601f830116840101915050949350505050565b5f6020808385031215612237575f80fd5b825167ffffffffffffffff8082111561224e575f80fd5b9084019060c08287031215612261575f80fd5b612269611fda565b825161227481611f42565b81528284015161228381611f42565b80858301525060408301516040820152606083015160608201526080830151608082015260a0830151828111156122b8575f80fd5b80840193505086601f8401126122cc575f80fd5b825191506122dc6120728361202e565b82815287858486010111156122ef575f80fd5b828585018683015e5f8584830101528060a0830152508094505050505092915050565b5f60208284031215612322575f80fd5b5051919050565b80518015158114612338575f80fd5b919050565b5f6080828403121561234d575f80fd5b6040516080810181811067ffffffffffffffff8211171561237057612370611f84565b604052825161237e81611f42565b8152602083015161238e81611f42565b6020820152604083810151908201526123a960608401612329565b60608201529392505050565b5f82601f8301126123c4575f80fd5b8151602067ffffffffffffffff8211156123e0576123e0611f84565b8160051b6123ef828201611ffd565b9283528481018201928281019087851115612408575f80fd5b83870192505b848310156124275782518252918301919083019061240e565b979650505050505050565b5f60208284031215612442575f80fd5b815167ffffffffffffffff80821115612459575f80fd5b9083019060a0828603121561246c575f80fd5b612474611fb1565b825161247f81611f42565b8152602083015161248f81611f42565b60208201526040830151828111156124a5575f80fd5b6124b1878286016123b5565b6040830152506060830151828111156124c8575f80fd5b6124d4878286016123b5565b6060830152506124e660808401612329565b608082015295945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761042557610425612521565b600181815b8085111561259f57815f190482111561258557612585612521565b8085161561259257918102915b93841c939080029061256a565b509250929050565b5f826125b557506001610425565b816125c157505f610425565b81600181146125d757600281146125e1576125fd565b6001915050610425565b60ff8411156125f2576125f2612521565b50506001821b610425565b5060208310610133831016604e8410600b8410161715612620575081810a610425565b61262a8383612565565b805f190482111561263d5761263d612521565b029392505050565b5f6116a683836125a756"; + hex"6080604052348015600e575f80fd5b506015601f565b601b601f565b60cf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615606e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460cc5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b612539806100dc5f395ff3fe608060405234801561000f575f80fd5b5060043610610115575f3560e01c806359f89dda116100ad578063a086e1751161007d578063a4c9d30011610063578063a4c9d3001461030a578063d547741f14610312578063f2fde38b14610325575f80fd5b8063a086e175146102fb578063a217fddf14610303575f80fd5b806359f89dda14610281578063715018a6146102945780638da5cb5b1461029c57806391d14854146102a4575f80fd5b80633013ce29116100e85780633013ce29146101c8578063325cd7961461020c57806336568abe1461025b578063439fab911461026e575f80fd5b806301ffc9a71461011957806304a0db2014610141578063248a9ca3146101725780632f2ff15d146101b3575b5f80fd5b61012c610127366004611e20565b610338565b60405190151581526020015b60405180910390f35b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b3202545b604051908152602001610138565b610164610180366004611e5f565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6101c66101c1366004611e8a565b61042b565b005b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b3201546001600160a01b03165b6040516001600160a01b039091168152602001610138565b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b32015474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610138565b6101c6610269366004611e8a565b610474565b61016461027c366004611fc2565b6104c5565b6101c661028f366004611ff4565b610a29565b6101c6610dba565b6101f4610dcd565b61012c6102b2366004611e8a565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101f4610e01565b6101645f81565b6101c6610e29565b6101c6610320366004611e8a565b610ef2565b6101c6610333366004612049565b610f35565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f59f89dda0000000000000000000000000000000000000000000000000000000014806103ca57507fffffffff0000000000000000000000000000000000000000000000000000000082167f439fab9100000000000000000000000000000000000000000000000000000000145b8061041657507fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000145b80610425575061042582610f88565b92915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546104648161101e565b61046e8383611028565b50505050565b6001600160a01b03811633146104b6576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104c082826110fb565b505050565b5f806104cf61119f565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156104fb5750825b90505f8267ffffffffffffffff1660011480156105175750303b155b905081158015610525575080155b1561055c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156105a757845468ff00000000000000001916680100000000000000001785555b5f878060200190518101906105bc9190612064565b80519091506001600160a01b0316610600576040517fa7d26c7300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516001600160a01b0316610644576040517f364467d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408101516001600160a01b0316610688576040517f3731597600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608101516001600160a01b03166106cc576040517ff10d418200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80608001515f03610709576040517f7e0eb2bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80517f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b320080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b039384161782556020808501517f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b32038054841691861691909117905560608501517f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b320180549093169416938417909155604080517f313ce567000000000000000000000000000000000000000000000000000000008152905192935f93909263313ce56792600480820193918290030181865afa15801561081a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083e91906120d5565b6001830180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff84160217905560808401516002840155604084015190915061089f906111c7565b7fbf322f47f534976d35baa3292f4fd04bf379264783a734383401b0e6e51cb16d835f0151846020015185604001518660600151858860800151604051610923969594939291906001600160a01b039687168152948616602086015292851660408501529316606083015260ff92909216608082015260a081019190915260c00190565b60405180910390a161094f604051806020016040528085604001516001600160a01b03168152506111d8565b5061097e7f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc0284604001516110fb565b506109ad7fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d384604001516110fb565b507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc398505050508315610a1f57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050919050565b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b320080546001600160a01b0316338114610a8457848484604051633ae4063b60e01b8152600401610a7b939291906120f5565b60405180910390fd5b7f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8218403610da8575f83806020019051810190610ac09190612141565b60018481015460808301519293506001600160a01b038116927401000000000000000000000000000000000000000090910460ff16915f91610b03918490611573565b90505f836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b42573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b6691906120d5565b60ff169050828114610bae576040517fe420d7af0000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610a7b565b5f866001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610beb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c0f919061222d565b90508760020154811115610c5f5760028801546040517f86529caa000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604401610a7b565b825f03610ca6578551604051633ae4063b60e01b8152610a7b91907f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f821908c906004016120f5565b8551610cbe906001600160a01b0387169030866115fa565b600388015486516040517fdb8554fc0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201524260248201525f92919091169063db8554fc90604401602060405180830381865afa158015610d2c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d50919061222d565b905060028114610d9a578651604051633ae4063b60e01b8152610a7b91907f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f821908d906004016120f5565b505050505050505050505050565b610db3858585611649565b5050505050565b610dc261196c565b610dcb5f6119b7565b565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b5f807f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b3200610df1565b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b3200610eef610e55610dcd565b60018301546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610eb6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eda919061222d565b60018401546001600160a01b03169190611a3f565b50565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610f2b8161101e565b61046e83836110fb565b610f3d61196c565b6001600160a01b038116610f7f576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610a7b565b610eef816119b7565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061042557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610425565b610eef8133611a8d565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166110eb575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556110a13390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610425565b5f915050610425565b5092915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156110eb575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610425565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610425565b6111cf611b1d565b610eef81611b5b565b5f6111e1611b63565b81516001600160a01b0316611222576040517fd264eed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61126c7f50a07cb25d0d864370863300b20987dfdae089abad71b607faf639d09d0533917f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b611b6b565b6112967f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b80611b6b565b6112e07f3dd35eca0ca8a128757fa464a5dfa4ad6cc4853cad96dce4e90fdbea4f0a52e37f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d611b6b565b61130a7f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d80611b6b565b6113547f54f0af3716c79b30b8c228679d31d77a1a5f526c16af3262730e0a8de4363fed7fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c611b6b565b61137e7fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c80611b6b565b6113c87f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8217f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc02611b6b565b6113f27f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc0280611b6b565b61143c7f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e9828697fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d3611b6b565b6114667fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d380611b6b565b6114937f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b835f0151611028565b506114c17f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d835f0151611028565b506114ef7fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c835f0151611028565b5061151d7f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc02835f0151611028565b5061154b7fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d3835f0151611028565b507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc392915050565b5f82601211156115a7576012839003600183161561159d576115958582611c0c565b9150506115f3565b6115958582611c58565b60128311156115f0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee830160028316156115e6576115958582611c82565b6115958582611cd2565b50825b9392505050565b611608848484846001611d01565b61046e576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610a7b565b7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a82148061169657507f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a4882145b156118ff575f805f7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a85036116f6575f848060200190518101906116da9190612258565b9050805f01519350806020015192508060600151915050611722565b5f8480602001905181019061170b919061234d565b805160208201516080909201519095509093509150505b80156118f7576001600160a01b03831615801561177557506001600160a01b0382165f9081527f96f78a99f93d631b75bc050854c9b764642c10564e41ed27c197a36ddabb1df9602052604090205460ff165b806117c857506001600160a01b0382161580156117c857506001600160a01b0383165f9081527f3907f76fa0fb1e5d0f263c5c4fe4316026052cf960c55a1c768106d8b9701c10602052604090205460ff165b156117d557505050505050565b7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a8514801561183a57506001600160a01b0386165f9081527f6ba48721fcbb2613af13d8285fe9ee4a081f7995464037bb5ea27397912881d2602052604090205460ff165b806118a557507f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a48851480156118a557506001600160a01b0386165f9081527f29e42896fa6edf5a5d7ff0bcd00acffbece6eb6cc7b44d0807bfd84929cc6e1b602052604090205460ff165b156118b257505050505050565b6040517ffe720f780000000000000000000000000000000000000000000000000000000081526001600160a01b03808516600483015283166024820152604401610a7b565b505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038716845290915290205460ff161561194d57505050565b828282604051633ae4063b60e01b8152600401610a7b939291906120f5565b33611975610dcd565b6001600160a01b031614610dcb576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610a7b565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b611a4c8383836001611d87565b6104c0576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610a7b565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611b19576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610a7b565b5050565b611b25611e02565b610dcb576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f3d611b1d565b610dcb611b1d565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268005f611bc4845f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b5f85815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b5f604e8210611c2e578215611c22576001611c24565b5f5b60ff169050610425565b600a82900a808481611c4257611c4261240f565b04915080820284146110f4575060010192915050565b5f604e821015611c7a5781600a0a8381611c7457611c7461240f565b046115f3565b5f9392505050565b5f604e8210611ca1578215611c98575f19611c9a565b5f5b9050610425565b50600a81900a8281029083818381611cbb57611cbb61240f565b0414611cc8575f19611cca565b815b949350505050565b600a81900a611ce18184612437565b9050604e8210610425578215611c7a57611cfc82600a61252e565b6115f3565b6040517f23b872dd000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f51148316611d76578383151615611d6a573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316611df6578383151615611dea573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f611e0b61119f565b5468010000000000000000900460ff16919050565b5f60208284031215611e30575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146115f3575f80fd5b5f60208284031215611e6f575f80fd5b5035919050565b6001600160a01b0381168114610eef575f80fd5b5f8060408385031215611e9b575f80fd5b823591506020830135611ead81611e76565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b60405160a0810167ffffffffffffffff81118282101715611eef57611eef611eb8565b60405290565b60405160c0810167ffffffffffffffff81118282101715611eef57611eef611eb8565b604051601f8201601f1916810167ffffffffffffffff81118282101715611f4157611f41611eb8565b604052919050565b5f67ffffffffffffffff821115611f6257611f62611eb8565b50601f01601f191660200190565b5f82601f830112611f7f575f80fd5b8135611f92611f8d82611f49565b611f18565b818152846020838601011115611fa6575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215611fd2575f80fd5b813567ffffffffffffffff811115611fe8575f80fd5b611cca84828501611f70565b5f805f60608486031215612006575f80fd5b833561201181611e76565b925060208401359150604084013567ffffffffffffffff811115612033575f80fd5b61203f86828701611f70565b9150509250925092565b5f60208284031215612059575f80fd5b81356115f381611e76565b5f60a08284031215612074575f80fd5b61207c611ecc565b825161208781611e76565b8152602083015161209781611e76565b602082015260408301516120aa81611e76565b604082015260608301516120bd81611e76565b60608201526080928301519281019290925250919050565b5f602082840312156120e5575f80fd5b815160ff811681146115f3575f80fd5b6001600160a01b0384168152826020820152606060408201525f82518060608401528060208501608085015e5f608082850101526080601f19601f830116840101915050949350505050565b5f6020808385031215612152575f80fd5b825167ffffffffffffffff80821115612169575f80fd5b9084019060c0828703121561217c575f80fd5b612184611ef5565b825161218f81611e76565b81528284015161219e81611e76565b80858301525060408301516040820152606083015160608201526080830151608082015260a0830151828111156121d3575f80fd5b80840193505086601f8401126121e7575f80fd5b825191506121f7611f8d83611f49565b828152878584860101111561220a575f80fd5b828585018683015e5f8584830101528060a0830152508094505050505092915050565b5f6020828403121561223d575f80fd5b5051919050565b80518015158114612253575f80fd5b919050565b5f60808284031215612268575f80fd5b6040516080810181811067ffffffffffffffff8211171561228b5761228b611eb8565b604052825161229981611e76565b815260208301516122a981611e76565b6020820152604083810151908201526122c460608401612244565b60608201529392505050565b5f82601f8301126122df575f80fd5b8151602067ffffffffffffffff8211156122fb576122fb611eb8565b8160051b61230a828201611f18565b9283528481018201928281019087851115612323575f80fd5b83870192505b8483101561234257825182529183019190830190612329565b979650505050505050565b5f6020828403121561235d575f80fd5b815167ffffffffffffffff80821115612374575f80fd5b9083019060a08286031215612387575f80fd5b61238f611ecc565b825161239a81611e76565b815260208301516123aa81611e76565b60208201526040830151828111156123c0575f80fd5b6123cc878286016122d0565b6040830152506060830151828111156123e3575f80fd5b6123ef878286016122d0565b60608301525061240160808401612244565b608082015295945050505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761042557610425612423565b600181815b8085111561248857815f190482111561246e5761246e612423565b8085161561247b57918102915b93841c9390800290612453565b509250929050565b5f8261249e57506001610425565b816124aa57505f610425565b81600181146124c057600281146124ca576124e6565b6001915050610425565b60ff8411156124db576124db612423565b50506001821b610425565b5060208310610133831016604e8410600b8410161715612509575081810a610425565b612513838361244e565b805f190482111561252657612526612423565b029392505050565b5f6115f3838361249056"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b5060043610610115575f3560e01c806359f89dda116100ad578063a086e1751161007d578063a4c9d30011610063578063a4c9d3001461030a578063d547741f14610312578063f2fde38b14610325575f80fd5b8063a086e175146102fb578063a217fddf14610303575f80fd5b806359f89dda14610281578063715018a6146102945780638da5cb5b1461029c57806391d14854146102a4575f80fd5b80633013ce29116100e85780633013ce29146101c8578063325cd7961461020c57806336568abe1461025b578063439fab911461026e575f80fd5b806301ffc9a71461011957806304a0db2014610141578063248a9ca3146101725780632f2ff15d146101b3575b5f80fd5b61012c610127366004611eec565b610338565b60405190151581526020015b60405180910390f35b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b3202545b604051908152602001610138565b610164610180366004611f2b565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6101c66101c1366004611f56565b61042b565b005b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b3201546001600160a01b03165b6040516001600160a01b039091168152602001610138565b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b32015474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610138565b6101c6610269366004611f56565b610474565b61016461027c3660046120a7565b6104c5565b6101c661028f3660046120d9565b610a55565b6101c6610e31565b6101f4610e44565b61012c6102b2366004611f56565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101f4610e78565b6101645f81565b6101c6610ea0565b6101c6610320366004611f56565b610f69565b6101c661033336600461212e565b610fac565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f59f89dda0000000000000000000000000000000000000000000000000000000014806103ca57507fffffffff0000000000000000000000000000000000000000000000000000000082167f439fab9100000000000000000000000000000000000000000000000000000000145b8061041657507fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000145b80610425575061042582610fff565b92915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461046481611095565b61046e838361109f565b50505050565b6001600160a01b03811633146104b6576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104c08282611190565b505050565b5f806104cf611252565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156104fb5750825b90505f8267ffffffffffffffff1660011480156105175750303b155b905081158015610525575080155b1561055c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156105bd5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b5f878060200190518101906105d29190612149565b80519091506001600160a01b0316610616576040517fa7d26c7300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516001600160a01b031661065a576040517f364467d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408101516001600160a01b031661069e576040517f3731597600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608101516001600160a01b03166106e2576040517ff10d418200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80608001515f0361071f576040517f7e0eb2bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80517f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b320080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b039384161782556020808501517f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b32038054841691861691909117905560608501517f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b320180549093169416938417909155604080517f313ce567000000000000000000000000000000000000000000000000000000008152905192935f93909263313ce56792600480820193918290030181865afa158015610830573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085491906121ba565b6001830180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff8416021790556080840151600284015560408401519091506108b59061127a565b7fbf322f47f534976d35baa3292f4fd04bf379264783a734383401b0e6e51cb16d835f0151846020015185604001518660600151858860800151604051610939969594939291906001600160a01b039687168152948616602086015292851660408501529316606083015260ff92909216608082015260a081019190915260c00190565b60405180910390a1610965604051806020016040528085604001516001600160a01b031681525061128b565b506109947f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc028460400151611190565b506109c37fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d38460400151611190565b507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc398505050508315610a4b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050919050565b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b320080546001600160a01b0316338114610ac9578484846040517f3ae4063b000000000000000000000000000000000000000000000000000000008152600401610ac0939291906121da565b60405180910390fd5b7f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8218403610e1f575f83806020019051810190610b059190612226565b60018481015460808301519293506001600160a01b038116927401000000000000000000000000000000000000000090910460ff16915f91610b48918490611626565b90505f836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bab91906121ba565b60ff169050828114610bf3576040517fe420d7af0000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610ac0565b5f866001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c549190612312565b90508760020154811115610ca45760028801546040517f86529caa000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604401610ac0565b825f03610d045785516040517f3ae4063b000000000000000000000000000000000000000000000000000000008152610ac091907f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f821908c906004016121da565b8551610d1c906001600160a01b0387169030866116ad565b600388015486516040517fdb8554fc0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201524260248201525f92919091169063db8554fc90604401602060405180830381865afa158015610d8a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dae9190612312565b905060028114610e115786516040517f3ae4063b000000000000000000000000000000000000000000000000000000008152610ac091907f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f821908d906004016121da565b505050505050505050505050565b610e2a8585856116fc565b5050505050565b610e39611a38565b610e425f611a83565b565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b5f807f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b3200610e68565b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b3200610f66610ecc610e44565b60018301546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610f2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f519190612312565b60018401546001600160a01b03169190611b0b565b50565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610fa281611095565b61046e8383611190565b610fb4611a38565b6001600160a01b038116610ff6576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610ac0565b610f6681611a83565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061042557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610425565b610f668133611b59565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611180575f848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556111363390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610425565b5f915050610425565b5092915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611180575f848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610425565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610425565b611282611be9565b610f6681611c27565b5f611294611c2f565b81516001600160a01b03166112d5576040517fd264eed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61131f7f50a07cb25d0d864370863300b20987dfdae089abad71b607faf639d09d0533917f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b611c37565b6113497f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b80611c37565b6113937f3dd35eca0ca8a128757fa464a5dfa4ad6cc4853cad96dce4e90fdbea4f0a52e37f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d611c37565b6113bd7f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d80611c37565b6114077f54f0af3716c79b30b8c228679d31d77a1a5f526c16af3262730e0a8de4363fed7fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c611c37565b6114317fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c80611c37565b61147b7f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8217f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc02611c37565b6114a57f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc0280611c37565b6114ef7f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e9828697fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d3611c37565b6115197fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d380611c37565b6115467f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b835f015161109f565b506115747f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d835f015161109f565b506115a27fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c835f015161109f565b506115d07f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc02835f015161109f565b506115fe7fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d3835f015161109f565b507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc392915050565b5f826012111561165a5760128390036001831615611650576116488582611cd8565b9150506116a6565b6116488582611d24565b60128311156116a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee83016002831615611699576116488582611d4e565b6116488582611d9e565b50825b9392505050565b6116bb848484846001611dcd565b61046e576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610ac0565b7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a82148061174957507f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a4882145b156119b2575f805f7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a85036117a9575f8480602001905181019061178d919061233d565b9050805f015193508060200151925080606001519150506117d5565b5f848060200190518101906117be9190612432565b805160208201516080909201519095509093509150505b80156119aa576001600160a01b03831615801561182857506001600160a01b0382165f9081527f96f78a99f93d631b75bc050854c9b764642c10564e41ed27c197a36ddabb1df9602052604090205460ff165b8061187b57506001600160a01b03821615801561187b57506001600160a01b0383165f9081527f3907f76fa0fb1e5d0f263c5c4fe4316026052cf960c55a1c768106d8b9701c10602052604090205460ff165b1561188857505050505050565b7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a851480156118ed57506001600160a01b0386165f9081527f6ba48721fcbb2613af13d8285fe9ee4a081f7995464037bb5ea27397912881d2602052604090205460ff165b8061195857507f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a488514801561195857506001600160a01b0386165f9081527f29e42896fa6edf5a5d7ff0bcd00acffbece6eb6cc7b44d0807bfd84929cc6e1b602052604090205460ff165b1561196557505050505050565b6040517ffe720f780000000000000000000000000000000000000000000000000000000081526001600160a01b03808516600483015283166024820152604401610ac0565b505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038716845290915290205460ff1615611a0057505050565b8282826040517f3ae4063b000000000000000000000000000000000000000000000000000000008152600401610ac0939291906121da565b33611a41610e44565b6001600160a01b031614610e42576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610ac0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b611b188383836001611e53565b6104c0576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610ac0565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611be5576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610ac0565b5050565b611bf1611ece565b610e42576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fb4611be9565b610e42611be9565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268005f611c90845f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b5f85815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b5f604e8210611cfa578215611cee576001611cf0565b5f5b60ff169050610425565b600a82900a808481611d0e57611d0e6124f4565b0491508082028414611189575060010192915050565b5f604e821015611d465781600a0a8381611d4057611d406124f4565b046116a6565b5f9392505050565b5f604e8210611d6d578215611d64575f19611d66565b5f5b9050610425565b50600a81900a8281029083818381611d8757611d876124f4565b0414611d94575f19611d96565b815b949350505050565b600a81900a611dad818461254e565b9050604e8210610425578215611d4657611dc882600a612645565b6116a6565b6040517f23b872dd000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f51148316611e42578383151615611e36573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316611ec2578383151615611eb6573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f611ed7611252565b5468010000000000000000900460ff16919050565b5f60208284031215611efc575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146116a6575f80fd5b5f60208284031215611f3b575f80fd5b5035919050565b6001600160a01b0381168114610f66575f80fd5b5f8060408385031215611f67575f80fd5b823591506020830135611f7981611f42565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160a0810167ffffffffffffffff81118282101715611fd457611fd4611f84565b60405290565b60405160c0810167ffffffffffffffff81118282101715611fd457611fd4611f84565b604051601f8201601f1916810167ffffffffffffffff8111828210171561202657612026611f84565b604052919050565b5f67ffffffffffffffff82111561204757612047611f84565b50601f01601f191660200190565b5f82601f830112612064575f80fd5b81356120776120728261202e565b611ffd565b81815284602083860101111561208b575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156120b7575f80fd5b813567ffffffffffffffff8111156120cd575f80fd5b611d9684828501612055565b5f805f606084860312156120eb575f80fd5b83356120f681611f42565b925060208401359150604084013567ffffffffffffffff811115612118575f80fd5b61212486828701612055565b9150509250925092565b5f6020828403121561213e575f80fd5b81356116a681611f42565b5f60a08284031215612159575f80fd5b612161611fb1565b825161216c81611f42565b8152602083015161217c81611f42565b6020820152604083015161218f81611f42565b604082015260608301516121a281611f42565b60608201526080928301519281019290925250919050565b5f602082840312156121ca575f80fd5b815160ff811681146116a6575f80fd5b6001600160a01b0384168152826020820152606060408201525f82518060608401528060208501608085015e5f608082850101526080601f19601f830116840101915050949350505050565b5f6020808385031215612237575f80fd5b825167ffffffffffffffff8082111561224e575f80fd5b9084019060c08287031215612261575f80fd5b612269611fda565b825161227481611f42565b81528284015161228381611f42565b80858301525060408301516040820152606083015160608201526080830151608082015260a0830151828111156122b8575f80fd5b80840193505086601f8401126122cc575f80fd5b825191506122dc6120728361202e565b82815287858486010111156122ef575f80fd5b828585018683015e5f8584830101528060a0830152508094505050505092915050565b5f60208284031215612322575f80fd5b5051919050565b80518015158114612338575f80fd5b919050565b5f6080828403121561234d575f80fd5b6040516080810181811067ffffffffffffffff8211171561237057612370611f84565b604052825161237e81611f42565b8152602083015161238e81611f42565b6020820152604083810151908201526123a960608401612329565b60608201529392505050565b5f82601f8301126123c4575f80fd5b8151602067ffffffffffffffff8211156123e0576123e0611f84565b8160051b6123ef828201611ffd565b9283528481018201928281019087851115612408575f80fd5b83870192505b848310156124275782518252918301919083019061240e565b979650505050505050565b5f60208284031215612442575f80fd5b815167ffffffffffffffff80821115612459575f80fd5b9083019060a0828603121561246c575f80fd5b612474611fb1565b825161247f81611f42565b8152602083015161248f81611f42565b60208201526040830151828111156124a5575f80fd5b6124b1878286016123b5565b6040830152506060830151828111156124c8575f80fd5b6124d4878286016123b5565b6060830152506124e660808401612329565b608082015295945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761042557610425612521565b600181815b8085111561259f57815f190482111561258557612585612521565b8085161561259257918102915b93841c939080029061256a565b509250929050565b5f826125b557506001610425565b816125c157505f610425565b81600181146125d757600281146125e1576125fd565b6001915050610425565b60ff8411156125f2576125f2612521565b50506001821b610425565b5060208310610133831016604e8410600b8410161715612620575081810a610425565b61262a8383612565565b805f190482111561263d5761263d612521565b029392505050565b5f6116a683836125a756"; + hex"608060405234801561000f575f80fd5b5060043610610115575f3560e01c806359f89dda116100ad578063a086e1751161007d578063a4c9d30011610063578063a4c9d3001461030a578063d547741f14610312578063f2fde38b14610325575f80fd5b8063a086e175146102fb578063a217fddf14610303575f80fd5b806359f89dda14610281578063715018a6146102945780638da5cb5b1461029c57806391d14854146102a4575f80fd5b80633013ce29116100e85780633013ce29146101c8578063325cd7961461020c57806336568abe1461025b578063439fab911461026e575f80fd5b806301ffc9a71461011957806304a0db2014610141578063248a9ca3146101725780632f2ff15d146101b3575b5f80fd5b61012c610127366004611e20565b610338565b60405190151581526020015b60405180910390f35b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b3202545b604051908152602001610138565b610164610180366004611e5f565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6101c66101c1366004611e8a565b61042b565b005b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b3201546001600160a01b03165b6040516001600160a01b039091168152602001610138565b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b32015474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610138565b6101c6610269366004611e8a565b610474565b61016461027c366004611fc2565b6104c5565b6101c661028f366004611ff4565b610a29565b6101c6610dba565b6101f4610dcd565b61012c6102b2366004611e8a565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101f4610e01565b6101645f81565b6101c6610e29565b6101c6610320366004611e8a565b610ef2565b6101c6610333366004612049565b610f35565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f59f89dda0000000000000000000000000000000000000000000000000000000014806103ca57507fffffffff0000000000000000000000000000000000000000000000000000000082167f439fab9100000000000000000000000000000000000000000000000000000000145b8061041657507fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000145b80610425575061042582610f88565b92915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546104648161101e565b61046e8383611028565b50505050565b6001600160a01b03811633146104b6576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104c082826110fb565b505050565b5f806104cf61119f565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156104fb5750825b90505f8267ffffffffffffffff1660011480156105175750303b155b905081158015610525575080155b1561055c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156105a757845468ff00000000000000001916680100000000000000001785555b5f878060200190518101906105bc9190612064565b80519091506001600160a01b0316610600576040517fa7d26c7300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516001600160a01b0316610644576040517f364467d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408101516001600160a01b0316610688576040517f3731597600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608101516001600160a01b03166106cc576040517ff10d418200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80608001515f03610709576040517f7e0eb2bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80517f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b320080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b039384161782556020808501517f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b32038054841691861691909117905560608501517f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b320180549093169416938417909155604080517f313ce567000000000000000000000000000000000000000000000000000000008152905192935f93909263313ce56792600480820193918290030181865afa15801561081a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083e91906120d5565b6001830180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff84160217905560808401516002840155604084015190915061089f906111c7565b7fbf322f47f534976d35baa3292f4fd04bf379264783a734383401b0e6e51cb16d835f0151846020015185604001518660600151858860800151604051610923969594939291906001600160a01b039687168152948616602086015292851660408501529316606083015260ff92909216608082015260a081019190915260c00190565b60405180910390a161094f604051806020016040528085604001516001600160a01b03168152506111d8565b5061097e7f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc0284604001516110fb565b506109ad7fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d384604001516110fb565b507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc398505050508315610a1f57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050919050565b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b320080546001600160a01b0316338114610a8457848484604051633ae4063b60e01b8152600401610a7b939291906120f5565b60405180910390fd5b7f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8218403610da8575f83806020019051810190610ac09190612141565b60018481015460808301519293506001600160a01b038116927401000000000000000000000000000000000000000090910460ff16915f91610b03918490611573565b90505f836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b42573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b6691906120d5565b60ff169050828114610bae576040517fe420d7af0000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610a7b565b5f866001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610beb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c0f919061222d565b90508760020154811115610c5f5760028801546040517f86529caa000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604401610a7b565b825f03610ca6578551604051633ae4063b60e01b8152610a7b91907f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f821908c906004016120f5565b8551610cbe906001600160a01b0387169030866115fa565b600388015486516040517fdb8554fc0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201524260248201525f92919091169063db8554fc90604401602060405180830381865afa158015610d2c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d50919061222d565b905060028114610d9a578651604051633ae4063b60e01b8152610a7b91907f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f821908d906004016120f5565b505050505050505050505050565b610db3858585611649565b5050505050565b610dc261196c565b610dcb5f6119b7565b565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b5f807f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b3200610df1565b7f8fe11d932915502a5df2182ac99faeb149787a3fda1afc79ff772fdaf26b3200610eef610e55610dcd565b60018301546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610eb6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eda919061222d565b60018401546001600160a01b03169190611a3f565b50565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610f2b8161101e565b61046e83836110fb565b610f3d61196c565b6001600160a01b038116610f7f576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610a7b565b610eef816119b7565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061042557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610425565b610eef8133611a8d565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166110eb575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556110a13390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610425565b5f915050610425565b5092915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156110eb575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610425565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610425565b6111cf611b1d565b610eef81611b5b565b5f6111e1611b63565b81516001600160a01b0316611222576040517fd264eed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61126c7f50a07cb25d0d864370863300b20987dfdae089abad71b607faf639d09d0533917f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b611b6b565b6112967f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b80611b6b565b6112e07f3dd35eca0ca8a128757fa464a5dfa4ad6cc4853cad96dce4e90fdbea4f0a52e37f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d611b6b565b61130a7f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d80611b6b565b6113547f54f0af3716c79b30b8c228679d31d77a1a5f526c16af3262730e0a8de4363fed7fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c611b6b565b61137e7fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c80611b6b565b6113c87f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8217f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc02611b6b565b6113f27f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc0280611b6b565b61143c7f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e9828697fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d3611b6b565b6114667fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d380611b6b565b6114937f48ece560b6811ee496fa3dedc7d5be3dfce8c5eb8f1cc18626507e158a23169b835f0151611028565b506114c17f4fa4167c411e3d3edd62f8bf767cb8c66f94f891502ddab57e7c55ca1d7d891d835f0151611028565b506114ef7fe5c740c26fb65f0a8de546defe3fe0011d5f2292abe6c4e6c3833916f4d8f76c835f0151611028565b5061151d7f1ae915b310cb86de75afe5db1721d474dd0a8617151f7524866025476454bc02835f0151611028565b5061154b7fa0f4a7675effb97b81a0c9d5b53b44a73019f25c5ec8fda76d7c1ad3920851d3835f0151611028565b507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc392915050565b5f82601211156115a7576012839003600183161561159d576115958582611c0c565b9150506115f3565b6115958582611c58565b60128311156115f0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee830160028316156115e6576115958582611c82565b6115958582611cd2565b50825b9392505050565b611608848484846001611d01565b61046e576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610a7b565b7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a82148061169657507f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a4882145b156118ff575f805f7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a85036116f6575f848060200190518101906116da9190612258565b9050805f01519350806020015192508060600151915050611722565b5f8480602001905181019061170b919061234d565b805160208201516080909201519095509093509150505b80156118f7576001600160a01b03831615801561177557506001600160a01b0382165f9081527f96f78a99f93d631b75bc050854c9b764642c10564e41ed27c197a36ddabb1df9602052604090205460ff165b806117c857506001600160a01b0382161580156117c857506001600160a01b0383165f9081527f3907f76fa0fb1e5d0f263c5c4fe4316026052cf960c55a1c768106d8b9701c10602052604090205460ff165b156117d557505050505050565b7f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a8514801561183a57506001600160a01b0386165f9081527f6ba48721fcbb2613af13d8285fe9ee4a081f7995464037bb5ea27397912881d2602052604090205460ff165b806118a557507f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a48851480156118a557506001600160a01b0386165f9081527f29e42896fa6edf5a5d7ff0bcd00acffbece6eb6cc7b44d0807bfd84929cc6e1b602052604090205460ff165b156118b257505050505050565b6040517ffe720f780000000000000000000000000000000000000000000000000000000081526001600160a01b03808516600483015283166024820152604401610a7b565b505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038716845290915290205460ff161561194d57505050565b828282604051633ae4063b60e01b8152600401610a7b939291906120f5565b33611975610dcd565b6001600160a01b031614610dcb576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610a7b565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b611a4c8383836001611d87565b6104c0576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610a7b565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611b19576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610a7b565b5050565b611b25611e02565b610dcb576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f3d611b1d565b610dcb611b1d565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268005f611bc4845f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b5f85815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b5f604e8210611c2e578215611c22576001611c24565b5f5b60ff169050610425565b600a82900a808481611c4257611c4261240f565b04915080820284146110f4575060010192915050565b5f604e821015611c7a5781600a0a8381611c7457611c7461240f565b046115f3565b5f9392505050565b5f604e8210611ca1578215611c98575f19611c9a565b5f5b9050610425565b50600a81900a8281029083818381611cbb57611cbb61240f565b0414611cc8575f19611cca565b815b949350505050565b600a81900a611ce18184612437565b9050604e8210610425578215611c7a57611cfc82600a61252e565b6115f3565b6040517f23b872dd000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f51148316611d76578383151615611d6a573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316611df6578383151615611dea573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f611e0b61119f565b5468010000000000000000900460ff16919050565b5f60208284031215611e30575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146115f3575f80fd5b5f60208284031215611e6f575f80fd5b5035919050565b6001600160a01b0381168114610eef575f80fd5b5f8060408385031215611e9b575f80fd5b823591506020830135611ead81611e76565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b60405160a0810167ffffffffffffffff81118282101715611eef57611eef611eb8565b60405290565b60405160c0810167ffffffffffffffff81118282101715611eef57611eef611eb8565b604051601f8201601f1916810167ffffffffffffffff81118282101715611f4157611f41611eb8565b604052919050565b5f67ffffffffffffffff821115611f6257611f62611eb8565b50601f01601f191660200190565b5f82601f830112611f7f575f80fd5b8135611f92611f8d82611f49565b611f18565b818152846020838601011115611fa6575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215611fd2575f80fd5b813567ffffffffffffffff811115611fe8575f80fd5b611cca84828501611f70565b5f805f60608486031215612006575f80fd5b833561201181611e76565b925060208401359150604084013567ffffffffffffffff811115612033575f80fd5b61203f86828701611f70565b9150509250925092565b5f60208284031215612059575f80fd5b81356115f381611e76565b5f60a08284031215612074575f80fd5b61207c611ecc565b825161208781611e76565b8152602083015161209781611e76565b602082015260408301516120aa81611e76565b604082015260608301516120bd81611e76565b60608201526080928301519281019290925250919050565b5f602082840312156120e5575f80fd5b815160ff811681146115f3575f80fd5b6001600160a01b0384168152826020820152606060408201525f82518060608401528060208501608085015e5f608082850101526080601f19601f830116840101915050949350505050565b5f6020808385031215612152575f80fd5b825167ffffffffffffffff80821115612169575f80fd5b9084019060c0828703121561217c575f80fd5b612184611ef5565b825161218f81611e76565b81528284015161219e81611e76565b80858301525060408301516040820152606083015160608201526080830151608082015260a0830151828111156121d3575f80fd5b80840193505086601f8401126121e7575f80fd5b825191506121f7611f8d83611f49565b828152878584860101111561220a575f80fd5b828585018683015e5f8584830101528060a0830152508094505050505092915050565b5f6020828403121561223d575f80fd5b5051919050565b80518015158114612253575f80fd5b919050565b5f60808284031215612268575f80fd5b6040516080810181811067ffffffffffffffff8211171561228b5761228b611eb8565b604052825161229981611e76565b815260208301516122a981611e76565b6020820152604083810151908201526122c460608401612244565b60608201529392505050565b5f82601f8301126122df575f80fd5b8151602067ffffffffffffffff8211156122fb576122fb611eb8565b8160051b61230a828201611f18565b9283528481018201928281019087851115612323575f80fd5b83870192505b8483101561234257825182529183019190830190612329565b979650505050505050565b5f6020828403121561235d575f80fd5b815167ffffffffffffffff80821115612374575f80fd5b9083019060a08286031215612387575f80fd5b61238f611ecc565b825161239a81611e76565b815260208301516123aa81611e76565b60208201526040830151828111156123c0575f80fd5b6123cc878286016122d0565b6040830152506060830151828111156123e3575f80fd5b6123ef878286016122d0565b60608301525061240160808401612244565b608082015295945050505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761042557610425612423565b600181815b8085111561248857815f190482111561246e5761246e612423565b8085161561247b57918102915b93841c9390800290612453565b509250929050565b5f8261249e57506001610425565b816124aa57505f610425565b81600181146124c057600281146124ca576124e6565b6001915050610425565b60ff8411156124db576124db612423565b50506001821b610425565b5060208310610133831016604e8410600b8410161715612509575081810a610425565b612513838361244e565b805f190482111561252657612526612423565b029392505050565b5f6115f3838361249056"; diff --git a/src/generated/candidate/StoxReceipt.pointers.sol b/src/generated/candidate/StoxReceipt.pointers.sol index ff38583a..0c73b09e 100644 --- a/src/generated/candidate/StoxReceipt.pointers.sol +++ b/src/generated/candidate/StoxReceipt.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x06fffbad12ea80897d55aab5d4f1cd3f34f674237db44a148cc133334a0cca54); +bytes32 constant BYTECODE_HASH = bytes32(0xba9e672e00e89c68294ae67b2d99a80f7509a6b10da809bf84b5c2e578579862); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x2dF5cFE6d688EF9fF1B7c59A499D254b1527b286); +address constant DEPLOYED_ADDRESS = address(0xB092f127Bd44F19BFa96e78dB4BeaF1066D2914E); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6136e3806100d65f395ff3fe608060405234801561000f575f80fd5b50600436106100fa575f3560e01c8063481c6a7511610093578063a22cb46511610063578063a22cb46514610232578063c2530e3914610245578063e985e9c514610258578063f242432a146102b2575f80fd5b8063481c6a75146101bd5780634e1273f4146101f75780636d5b3f781461021757806395d89b411461022a575f80fd5b80630e89341c116100ce5780630e89341c14610171578063177769cb146101845780632eb2c2d614610197578063439fab91146101aa575f80fd5b8062fdd58e146100fe57806301ffc9a714610124578063043fa9871461014757806306fdde031461015c575b5f80fd5b61011161010c366004612a49565b6102c5565b6040519081526020015b60405180910390f35b610137610132366004612aa0565b6102e1565b604051901515815260200161011b565b61015a610155366004612b79565b6103c3565b005b61016461046a565b60405161011b9190612c29565b61016461017f366004612c3b565b6104cf565b61015a610192366004612c52565b610580565b61015a6101a5366004612d20565b61058f565b6101116101b8366004612dc7565b6105ae565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc200546040516001600160a01b03909116815260200161011b565b61020a610205366004612e01565b6107ae565b60405161011b9190612eed565b61015a610225366004612eff565b6108c5565b610164610975565b61015a610240366004612f63565b6109c6565b61015a610253366004612eff565b6109d1565b610137610266366004612f9e565b6001600160a01b039182165f9081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45016020908152604080832093909416825291909152205460ff1690565b61015a6102c0366004612eff565b610a37565b5f6102d883836102d3610a4d565b610ab3565b90505b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061037357507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b806102db57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146102db565b6103cb610b07565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055856104208686868686610b6e565b6104617fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19169055565b50505050505050565b6060610474610c25565b6040518060400160405280600881526020017f20526563656970740000000000000000000000000000000000000000000000008152506040516020016104bb929190612fe1565b604051602081830303815290604052905090565b60605f6104e56104dd610cd3565b60ff16610d78565b6104ed610c25565b6104f5610e15565b6104fd61046a565b6040516020016105109493929190612ff5565b60408051601f19818403018152828201909152601d82527f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000006020830152915061055882610ef5565b604051602001610569929190612fe1565b604051602081830303815290604052915050919050565b61058b338383610f01565b5050565b61059a335b86610f49565b6105a78585858585610ff9565b5050505050565b5f806105b861108c565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156105e45750825b90505f8267ffffffffffffffff1660011480156106005750303b155b90508115801561060e575080155b15610645576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156106a65784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6106bd60405180602001604052805f8152506110b4565b5f7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc20090505f888060200190518101906106f69190613137565b825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039190911617909155507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc3955083156107a45784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050919050565b606081518351146107fd57815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044015b60405180910390fd5b5f610806610a4d565b90505f845167ffffffffffffffff81111561082357610823612abb565b60405190808252806020026020018201604052801561084c578160200160208202803683370190505b5090505f5b85518110156108bc5761089786828151811061086f5761086f613152565b602002602001015186838151811061088957610889613152565b602002602001015185610ab3565b8282815181106108a9576108a9613152565b6020908102919091010152600101610851565b50949350505050565b6108cd610b07565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03871617905584610920868584610f01565b61092c858585856110c5565b61096d7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19169055565b505050505050565b606061097f610c25565b6040518060400160405280600581526020017f20524350540000000000000000000000000000000000000000000000000000008152506040516020016104bb929190612fe1565b61058b33838361113a565b6109d9610b07565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03871617905584610a2c868584610f01565b61092c85858561124e565b610a4033610594565b6105a78585858585610b6e565b5f306001600160a01b031663481c6a756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a8a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aae9190613137565b905090565b5f80610abf85856112cf565b90505f610aca6112e4565b6001600160a01b0387165f90815260209182526040808220888352909252908120549150610af9838387611345565b5093505050505b9392505050565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc20080546001600160a01b03163314610b6b576040517fc0b2335a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b6001600160a01b038416610bb0576040517f57f447ce0000000000000000000000000000000000000000000000000000000081525f60048201526024016107f4565b6001600160a01b038516610bf2576040517f01a835140000000000000000000000000000000000000000000000000000000081525f60048201526024016107f4565b6040805160018082526020820186905281830190815260608201859052608082019092529061046187878484875f6115ed565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc2008054604080517f95d89b410000000000000000000000000000000000000000000000000000000081529051606093926001600160a01b0316916395d89b41916004808301925f9291908290030181865afa158015610ca6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ccd919081019061319c565b91505090565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc2008054604080517f313ce56700000000000000000000000000000000000000000000000000000000815290515f93926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015610d54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ccd91906131e1565b60605f610d8483611645565b60010190505f8167ffffffffffffffff811115610da357610da3612abb565b6040519080825280601f01601f191660200182016040528015610dcd576020820181803683370190505b5090508181016020015b5f19017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610dd757509392505050565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc2008054604080517f38d52e0f0000000000000000000000000000000000000000000000000000000081529051606093926001600160a01b0316916338d52e0f9160048083019260209291908290030181865afa158015610e97573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ebb9190613137565b6001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610ca6573d5f803e3d5ffd5b60606102db825f611726565b805115610f44577fd66d6a9810a5cef78b704e7e04334961e997c81d337f029f74637f060f3d8d65838383604051610f3b93929190613215565b60405180910390a15b505050565b816001600160a01b0316816001600160a01b031614158015610faf57506001600160a01b038082165f9081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209386168352929052205460ff16155b1561058b576040517fe237d9220000000000000000000000000000000000000000000000000000000081526001600160a01b038084166004830152821660248201526044016107f4565b6001600160a01b03841661103b576040517f57f447ce0000000000000000000000000000000000000000000000000000000081525f60048201526024016107f4565b6001600160a01b03851661107d576040517f01a835140000000000000000000000000000000000000000000000000000000081525f60048201526024016107f4565b6105a7858585858560016115ed565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006102db565b6110bc6118a5565b610b6b816118e5565b6001600160a01b038416611107576040517f57f447ce0000000000000000000000000000000000000000000000000000000081525f60048201526024016107f4565b6040805160018082526020820186905281830190815260608201859052608082019092529061096d5f87848487846115ed565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45006001600160a01b03841661119d576040517f3e31884e0000000000000000000000000000000000000000000000000000000081525f60048201526024016107f4565b6001600160a01b0383166111df576040517fced3e1000000000000000000000000000000000000000000000000000000000081525f60048201526024016107f4565b6001600160a01b038481165f818152600184016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b6001600160a01b038316611290576040517f01a835140000000000000000000000000000000000000000000000000000000081525f60048201526024016107f4565b604080516001808252602082018590528183019081526060820184905260a082019092525f608082018181529192916105a791879185908590836115ed565b5f806112db84846118f6565b54949350505050565b5f8060ff1961131460017fedb99b3af8e1c50d494d6f1b4c75245a0b733cb90baa42bfe0e2f5bc8b000f82613259565b60405160200161132691815260200190565b60408051601f1981840301815291905280516020909101201692915050565b6040517f79ba43050000000000000000000000000000000000000000000000000000000081525f9081908490829081906001600160a01b038716906379ba43059061139a90869060039060019060040161326c565b606060405180830381865afa1580156113b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d991906132a4565b5091509150875f03611496575b5f198214611488576040517f79ba430500000000000000000000000000000000000000000000000000000000815291925082916001600160a01b038716906379ba43059061143e90859060039060019060040161326c565b606060405180830381865afa158015611459573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147d91906132a4565b5090925090506113e6565b5f83945094505050506115e5565b875b5f1983146115dd5782935060028203611548576040517fb21a2494000000000000000000000000000000000000000000000000000000008152600481018490525f90611538906001600160a01b038a169063b21a2494906024015f60405180830381865afa15801561150c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611533919081019061319c565b61196a565b9050611544828261197f565b9150505b6040517f79ba43050000000000000000000000000000000000000000000000000000000081526001600160a01b038816906379ba43059061159390869060039060019060040161326c565b606060405180830381865afa1580156115ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d291906132a4565b509093509150611498565b945091925050505b935093915050565b6115f9868686866119fa565b6001600160a01b0385161561096d573381156116225761161d818888888888611a5f565b610461565b6020858101519085015161163a838a8a85858a611bfc565b505050505050505050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061168d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106116b9576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106116d757662386f26fc10000830492506010015b6305f5e10083106116ef576305f5e100830492506008015b612710831061170357612710830492506004015b60648310611715576064830492506002015b600a83106102db5760010192915050565b606082515f03611744575060408051602081019091525f81526102db565b5f826117745760038451600261175a91906132e6565b61176491906132f9565b61176f906004613318565b611799565b6003845160046117849190613318565b61178f9060026132e6565b61179991906132f9565b905060405191507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f5261067083027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f18603f526020820181810185865187016020810180515f82525b82841015611857576003840193508351603f8160121c16518753600187019650603f81600c1c16518753600187019650603f8160061c16518753600187019650603f811651875350600186019550611804565b9052508590506118985760038651066001811461187b576002811461188e57611896565b603d6001840353603d6002840353611896565b603d60018403535b505b9183525060405292915050565b6118ad611d46565b6118e3576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6118ed6118a5565b610b6b81611d64565b5f8060ff1961192660017f3a8e79826d53842322cdcc810d4a989eb01ac46cfabfd48dcc021625ce13c2d7613259565b60405160200161193891815260200190565b60408051808303601f1901815291815281516020928301205f9687529290921681528185209585529490945250502090565b5f818060200190518101906102db919061332f565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156119dd576040517fbf463fe9000000000000000000000000000000000000000000000000000000008152600481018490526024016107f4565b5f6108bc6119f46119ee865f611db0565b85611e0a565b5f611e6c565b5f611a03610a4d565b90505f5b8351811015611a5257611a3486858381518110611a2657611a26613152565b602002602001015184611eae565b611a4a85858381518110611a2657611a26613152565b600101611a07565b506105a785858585611fb0565b6001600160a01b0384163b1561096d576040517fbc197c810000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063bc197c8190611abc9089908990889088908890600401613346565b6020604051808303815f875af1925050508015611af6575060408051601f3d908101601f19168201909252611af3918101906133a3565b60015b611b76573d808015611b23576040519150601f19603f3d011682016040523d82523d5f602084013e611b28565b606091505b5080515f03611b6e576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024016107f4565b805160208201fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014610461576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024016107f4565b6001600160a01b0384163b1561096d576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e6190611c5990899089908890889088906004016133be565b6020604051808303815f875af1925050508015611c93575060408051601f3d908101601f19168201909252611c90918101906133a3565b60015b611cc0573d808015611b23576040519150601f19603f3d011682016040523d82523d5f602084013e611b28565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014610461576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024016107f4565b5f611d4f61108c565b5468010000000000000000900460ff16919050565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45007f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4502610f44838261347c565b5f805f611dbd8585612063565b9150915080611e02576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016107f4565b509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480611e4f86868686612169565b915091505f611e5e8383612288565b9a9950505050505050505050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d611ea08282876122e6565b9350935050505b9250929050565b6001600160a01b038316611ec157505050565b5f611eca6112e4565b6001600160a01b0385165f90815260208281526040808320878452909152812054919250611ef886866112cf565b90505f80611f07838588611345565b91509150838103611f1c575050505050505050565b6001600160a01b0388165f908152602086815260408083208a84529091529020819055818314611f5157611f518888846124ce565b60408051858152602081018390529081018490526060810183905287906001600160a01b038a16907f956b049289f8dbe8716375414d9fa6bf32cde65ec1b7e102623775cacc66a6999060800160405180910390a35050505050505050565b5f611fb96124e2565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc200546040517fe5be7d900000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063e5be7d909061202a9084908990899089908990600401613538565b5f604051808303815f87803b158015612041575f80fd5b505af1158015612053573d5f803e3d5ffd5b505050506105a785858585612563565b5f601b83900b83148383826120c7577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156120a757620186a0860595506005850194505b8586601b0b146120c257600a860595508460010194506120a7565b6120dd565b855f036120dd57505f925060019150611ea79050565b848560030b14612139575f8512156120fd57505f9250829150611ea79050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016107f4565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f8085158415178015612181575f92505f915061227e565b61218b848761357d565b91505f612197886127c7565b90505f6121a3876127c7565b90505f6121b08383612828565b5090505f6f0785ee10d5da46d900f436a0000000008211156121e5576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a764000082111561220657670de0b6b3a7640000820491506012015b633b9aca0082111561221f57633b9aca00820491506009015b61271082111561223457612710820491506004015b811561224857600a82049150600101612234565b612252818761357d565b95506122748b8a61226e878761226987600a613684565b612844565b89612929565b9097509550505050505b5094509492505050565b5f805f6122958585612063565b91509150801580156122a5575081155b15611e02576040517f8eba4d0700000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016107f4565b5f805f85121561232c576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016107f4565b845f0361233e57505f905060016115e5565b8460ff8416850185811215612389576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016107f4565b5f805f8312156123f3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb38312156123ca575f8095509550505050506115e5565b825f03600a0a91508184816123e1576123e1613201565b04955050840290911491506115e59050565b5f8313156124be57604d831315612449576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff881660448201526064016107f4565b82600a0a9150815f198161245f5761245f613201565b048411156124ac576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff881660448201526064016107f4565b50919091029250600191506115e59050565b83600195509550505050506115e5565b5f6124d984846118f6565b91909155505050565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201545f907fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc200906001600160a01b03168061253e57339250505090565b6001909101805473ffffffffffffffffffffffffffffffffffffffff19169055919050565b805182517f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450091146125cd57825182516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016107f4565b335f5b84518110156126e8576020818102868101820151908601909101516001600160a01b0389161561269a575f828152602086815260408083206001600160a01b038d16845290915290205481811015612674576040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038b1660048201526024810182905260448101839052606481018490526084016107f4565b5f838152602087815260408083206001600160a01b038e16845290915290209082900390555b6001600160a01b038816156126de575f828152602086815260408083206001600160a01b038c168452909152812080548392906126d89084906132e6565b90915550505b50506001016125d0565b5083516001036127685760208401515f906020850151909150866001600160a01b0316886001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612759929190918252602082015260400190565b60405180910390a4505061096d565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516127b792919061368f565b60405180910390a4505050505050565b5f80821215612824577f8000000000000000000000000000000000000000000000000000000000000000820361281e57507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b5f805f1983850993909202808410938190039390930393915050565b5f805f6128518686612828565b91509150815f036128755783818161286b5761286b613201565b0492505050610b00565b8382106128bf576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016107f4565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f85871812156129f3577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8411156129e0576129887f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60016132e6565b84036129b857507f8000000000000000000000000000000000000000000000000000000000000000905081612a2c565b6129c3600a856132f9565b6129cc906136b3565b6129d784600161357d565b91509150612a2c565b6129e9846136b3565b8391509150612a2c565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115612a26576129cc600a856132f9565b50829050815b94509492505050565b6001600160a01b0381168114610b6b575f80fd5b5f8060408385031215612a5a575f80fd5b8235612a6581612a35565b946020939093013593505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610b6b575f80fd5b5f60208284031215612ab0575f80fd5b8135610b0081612a73565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612af857612af8612abb565b604052919050565b5f67ffffffffffffffff821115612b1957612b19612abb565b50601f01601f191660200190565b5f82601f830112612b36575f80fd5b8135612b49612b4482612b00565b612acf565b818152846020838601011115612b5d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f8060c08789031215612b8e575f80fd5b8635612b9981612a35565b95506020870135612ba981612a35565b94506040870135612bb981612a35565b9350606087013592506080870135915060a087013567ffffffffffffffff811115612be2575f80fd5b612bee89828a01612b27565b9150509295509295509295565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6102d86020830184612bfb565b5f60208284031215612c4b575f80fd5b5035919050565b5f8060408385031215612c63575f80fd5b82359150602083013567ffffffffffffffff811115612c80575f80fd5b612c8c85828601612b27565b9150509250929050565b5f67ffffffffffffffff821115612caf57612caf612abb565b5060051b60200190565b5f82601f830112612cc8575f80fd5b81356020612cd8612b4483612c96565b8083825260208201915060208460051b870101935086841115612cf9575f80fd5b602086015b84811015612d155780358352918301918301612cfe565b509695505050505050565b5f805f805f60a08688031215612d34575f80fd5b8535612d3f81612a35565b94506020860135612d4f81612a35565b9350604086013567ffffffffffffffff80821115612d6b575f80fd5b612d7789838a01612cb9565b94506060880135915080821115612d8c575f80fd5b612d9889838a01612cb9565b93506080880135915080821115612dad575f80fd5b50612dba88828901612b27565b9150509295509295909350565b5f60208284031215612dd7575f80fd5b813567ffffffffffffffff811115612ded575f80fd5b612df984828501612b27565b949350505050565b5f8060408385031215612e12575f80fd5b823567ffffffffffffffff80821115612e29575f80fd5b818501915085601f830112612e3c575f80fd5b81356020612e4c612b4483612c96565b82815260059290921b84018101918181019089841115612e6a575f80fd5b948201945b83861015612e91578535612e8281612a35565b82529482019490820190612e6f565b96505086013592505080821115612ea6575f80fd5b50612c8c85828601612cb9565b5f815180845260208085019450602084015f5b83811015612ee257815187529582019590820190600101612ec6565b509495945050505050565b602081525f6102d86020830184612eb3565b5f805f805f60a08688031215612f13575f80fd5b8535612f1e81612a35565b94506020860135612f2e81612a35565b93506040860135925060608601359150608086013567ffffffffffffffff811115612f57575f80fd5b612dba88828901612b27565b5f8060408385031215612f74575f80fd5b8235612f7f81612a35565b915060208301358015158114612f93575f80fd5b809150509250929050565b5f8060408385031215612faf575f80fd5b8235612fba81612a35565b91506020830135612f9381612a35565b5f81518060208401855e5f93019283525090919050565b5f612df9612fef8386612fca565b84612fca565b7f7b22646563696d616c73223a000000000000000000000000000000000000000081525f613026600c830187612fca565b7f2c226465736372697074696f6e223a2231206f6620746865736520726563656981527f7074732063616e206265206275726e656420616c6f6e67736964652031200000602082015261307c603e820187612fca565b90507f20746f2072656465656d2000000000000000000000000000000000000000000081526130ae600b820186612fca565b90507f2066726f6d20746865207661756c742e222c000000000000000000000000000081527f226e616d65223a220000000000000000000000000000000000000000000000006012820152613106601a820185612fca565b7f227d0000000000000000000000000000000000000000000000000000000000008152600201979650505050505050565b5f60208284031215613147575f80fd5b8151610b0081612a35565b634e487b7160e01b5f52603260045260245ffd5b5f613173612b4484612b00565b9050828152838383011115613186575f80fd5b8282602083015e5f602084830101529392505050565b5f602082840312156131ac575f80fd5b815167ffffffffffffffff8111156131c2575f80fd5b8201601f810184136131d2575f80fd5b612df984825160208401613166565b5f602082840312156131f1575f80fd5b815160ff81168114610b00575f80fd5b634e487b7160e01b5f52601260045260245ffd5b6001600160a01b0384168152826020820152606060408201525f61323c6060830184612bfb565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156102db576102db613245565b83815260208101839052606081016003831061329657634e487b7160e01b5f52602160045260245ffd5b826040830152949350505050565b5f805f606084860312156132b6575f80fd5b8351925060208401519150604084015167ffffffffffffffff811681146132db575f80fd5b809150509250925092565b808201808211156102db576102db613245565b5f8261331357634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176102db576102db613245565b5f6020828403121561333f575f80fd5b5051919050565b5f6001600160a01b03808816835280871660208401525060a0604083015261337160a0830186612eb3565b82810360608401526133838186612eb3565b905082810360808401526133978185612bfb565b98975050505050505050565b5f602082840312156133b3575f80fd5b8151610b0081612a73565b5f6001600160a01b03808816835280871660208401525084604083015283606083015260a060808301526133f560a0830184612bfb565b979650505050505050565b600181811c9082168061341457607f821691505b60208210810361343257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610f4457805f5260205f20601f840160051c8101602085101561345d5750805b601f840160051c820191505b818110156105a7575f8155600101613469565b815167ffffffffffffffff81111561349657613496612abb565b6134aa816134a48454613400565b84613438565b602080601f8311600181146134dd575f84156134c65750858301515b5f19600386901b1c1916600185901b17855561096d565b5f85815260208120601f198616915b8281101561350b578886015182559484019460019091019084016134ec565b508582101561352857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6001600160a01b038088168352808716602084015280861660408401525060a0606083015261356b60a0830185612eb3565b82810360808401526133978185612eb3565b8082018281125f83128015821682158216171561359c5761359c613245565b505092915050565b600181815b808511156135de57815f19048211156135c4576135c4613245565b808516156135d157918102915b93841c93908002906135a9565b509250929050565b5f826135f4575060016102db565b8161360057505f6102db565b816001811461361657600281146136205761363c565b60019150506102db565b60ff84111561363157613631613245565b50506001821b6102db565b5060208310610133831016604e8410600b841016171561365f575081810a6102db565b61366983836135a4565b805f190482111561367c5761367c613245565b029392505050565b5f6102d883836135e6565b604081525f6136a16040830185612eb3565b828103602084015261323c8185612eb3565b5f7f8000000000000000000000000000000000000000000000000000000000000000820361281e5761281e61324556"; + hex"6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b613518806100d65f395ff3fe608060405234801561000f575f80fd5b50600436106100fa575f3560e01c8063481c6a7511610093578063a22cb46511610063578063a22cb46514610232578063c2530e3914610245578063e985e9c514610258578063f242432a146102b2575f80fd5b8063481c6a75146101bd5780634e1273f4146101f75780636d5b3f781461021757806395d89b411461022a575f80fd5b80630e89341c116100ce5780630e89341c14610171578063177769cb146101845780632eb2c2d614610197578063439fab91146101aa575f80fd5b8062fdd58e146100fe57806301ffc9a714610124578063043fa9871461014757806306fdde031461015c575b5f80fd5b61011161010c36600461289a565b6102c5565b6040519081526020015b60405180910390f35b6101376101323660046128f1565b6102e1565b604051901515815260200161011b565b61015a6101553660046129ca565b6103c3565b005b61016461046a565b60405161011b9190612a7a565b61016461017f366004612a8c565b6104cf565b61015a610192366004612aa3565b610580565b61015a6101a5366004612b71565b61058f565b6101116101b8366004612c18565b6105ae565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc200546040516001600160a01b03909116815260200161011b565b61020a610205366004612c52565b610782565b60405161011b9190612d3e565b61015a610225366004612d50565b610899565b610164610949565b61015a610240366004612db4565b61099a565b61015a610253366004612d50565b6109a5565b610137610266366004612def565b6001600160a01b039182165f9081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45016020908152604080832093909416825291909152205460ff1690565b61015a6102c0366004612d50565b610a0b565b5f6102d883836102d3610a21565b610a87565b90505b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061037357507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b806102db57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146102db565b6103cb610adb565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055856104208686868686610b42565b6104617fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19169055565b50505050505050565b6060610474610bc6565b6040518060400160405280600881526020017f20526563656970740000000000000000000000000000000000000000000000008152506040516020016104bb929190612e32565b604051602081830303815290604052905090565b60605f6104e56104dd610c74565b60ff16610d19565b6104ed610bc6565b6104f5610db6565b6104fd61046a565b6040516020016105109493929190612e46565b60408051601f19818403018152828201909152601d82527f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000006020830152915061055882610e96565b604051602001610569929190612e32565b604051602081830303815290604052915050919050565b61058b338383610ea2565b5050565b61059a335b86610eea565b6105a78585858585610f9a565b5050505050565b5f806105b8610ffa565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156105e45750825b90505f8267ffffffffffffffff1660011480156106005750303b155b90508115801561060e575080155b15610645576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561069057845468ff00000000000000001916680100000000000000001785555b6106a760405180602001604052805f815250611022565b5f7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc20090505f888060200190518101906106e09190612f88565b825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039190911617909155507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc39550831561077857845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050919050565b606081518351146107d157815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044015b60405180910390fd5b5f6107da610a21565b90505f845167ffffffffffffffff8111156107f7576107f761290c565b604051908082528060200260200182016040528015610820578160200160208202803683370190505b5090505f5b85518110156108905761086b86828151811061084357610843612fa3565b602002602001015186838151811061085d5761085d612fa3565b602002602001015185610a87565b82828151811061087d5761087d612fa3565b6020908102919091010152600101610825565b50949350505050565b6108a1610adb565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038716179055846108f4868584610ea2565b61090085858585611033565b6109417fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19169055565b505050505050565b6060610953610bc6565b6040518060400160405280600581526020017f20524350540000000000000000000000000000000000000000000000000000008152506040516020016104bb929190612e32565b61058b33838361108f565b6109ad610adb565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03871617905584610a00868584610ea2565b6109008585856111a3565b610a1433610594565b6105a78585858585610b42565b5f306001600160a01b031663481c6a756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a5e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a829190612f88565b905090565b5f80610a93858561120a565b90505f610a9e61121f565b6001600160a01b0387165f90815260209182526040808220888352909252908120549150610acd838387611280565b5093505050505b9392505050565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc20080546001600160a01b03163314610b3f576040517fc0b2335a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b6001600160a01b038416610b6b57604051632bfa23e760e11b81525f60048201526024016107c8565b6001600160a01b038516610b9357604051626a0d4560e21b81525f60048201526024016107c8565b6040805160018082526020820186905281830190815260608201859052608082019092529061046187878484875f6114dd565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc2008054604080517f95d89b410000000000000000000000000000000000000000000000000000000081529051606093926001600160a01b0316916395d89b41916004808301925f9291908290030181865afa158015610c47573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c6e9190810190612fed565b91505090565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc2008054604080517f313ce56700000000000000000000000000000000000000000000000000000000815290515f93926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015610cf5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c6e9190613032565b60605f610d2583611535565b60010190505f8167ffffffffffffffff811115610d4457610d4461290c565b6040519080825280601f01601f191660200182016040528015610d6e576020820181803683370190505b5090508181016020015b5f19017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610d7857509392505050565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc2008054604080517f38d52e0f0000000000000000000000000000000000000000000000000000000081529051606093926001600160a01b0316916338d52e0f9160048083019260209291908290030181865afa158015610e38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5c9190612f88565b6001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610c47573d5f803e3d5ffd5b60606102db825f611616565b805115610ee5577fd66d6a9810a5cef78b704e7e04334961e997c81d337f029f74637f060f3d8d65838383604051610edc93929190613066565b60405180910390a15b505050565b816001600160a01b0316816001600160a01b031614158015610f5057506001600160a01b038082165f9081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209386168352929052205460ff16155b1561058b576040517fe237d9220000000000000000000000000000000000000000000000000000000081526001600160a01b038084166004830152821660248201526044016107c8565b6001600160a01b038416610fc357604051632bfa23e760e11b81525f60048201526024016107c8565b6001600160a01b038516610feb57604051626a0d4560e21b81525f60048201526024016107c8565b6105a7858585858560016114dd565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006102db565b61102a611795565b610b3f816117d5565b6001600160a01b03841661105c57604051632bfa23e760e11b81525f60048201526024016107c8565b604080516001808252602082018690528183019081526060820185905260808201909252906109415f87848487846114dd565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45006001600160a01b0384166110f2576040517f3e31884e0000000000000000000000000000000000000000000000000000000081525f60048201526024016107c8565b6001600160a01b038316611134576040517fced3e1000000000000000000000000000000000000000000000000000000000081525f60048201526024016107c8565b6001600160a01b038481165f818152600184016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b6001600160a01b0383166111cb57604051626a0d4560e21b81525f60048201526024016107c8565b604080516001808252602082018590528183019081526060820184905260a082019092525f608082018181529192916105a791879185908590836114dd565b5f8061121684846117e6565b54949350505050565b5f8060ff1961124f60017fedb99b3af8e1c50d494d6f1b4c75245a0b733cb90baa42bfe0e2f5bc8b000f826130aa565b60405160200161126191815260200190565b60408051601f1981840301815291905280516020909101201692915050565b6040516379ba430560e01b81525f9081908490829081906001600160a01b038716906379ba4305906112bc9086906003906001906004016130bd565b606060405180830381865afa1580156112d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112fb91906130f5565b5091509150875f0361139f575b5f198214611391576040516379ba430560e01b815291925082916001600160a01b038716906379ba4305906113479085906003906001906004016130bd565b606060405180830381865afa158015611362573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061138691906130f5565b509092509050611308565b5f83945094505050506114d5565b875b5f1983146114cd5782935060028203611451576040517fb21a2494000000000000000000000000000000000000000000000000000000008152600481018490525f90611441906001600160a01b038a169063b21a2494906024015f60405180830381865afa158015611415573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261143c9190810190612fed565b61185a565b905061144d828261186f565b9150505b6040516379ba430560e01b81526001600160a01b038816906379ba4305906114839086906003906001906004016130bd565b606060405180830381865afa15801561149e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c291906130f5565b5090935091506113a1565b945091925050505b935093915050565b6114e9868686866118ea565b6001600160a01b03851615610941573381156115125761150d81888888888861194f565b610461565b6020858101519085015161152a838a8a85858a611aba565b505050505050505050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061157d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115a9576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115c757662386f26fc10000830492506010015b6305f5e10083106115df576305f5e100830492506008015b61271083106115f357612710830492506004015b60648310611605576064830492506002015b600a83106102db5760010192915050565b606082515f03611634575060408051602081019091525f81526102db565b5f826116645760038451600261164a9190613137565b611654919061314a565b61165f906004613169565b611689565b6003845160046116749190613169565b61167f906002613137565b611689919061314a565b905060405191507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f5261067083027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f18603f526020820181810185865187016020810180515f82525b82841015611747576003840193508351603f8160121c16518753600187019650603f81600c1c16518753600187019650603f8160061c16518753600187019650603f8116518753506001860195506116f4565b9052508590506117885760038651066001811461176b576002811461177e57611786565b603d6001840353603d6002840353611786565b603d60018403535b505b9183525060405292915050565b61179d611beb565b6117d3576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6117dd611795565b610b3f81611c09565b5f8060ff1961181660017f3a8e79826d53842322cdcc810d4a989eb01ac46cfabfd48dcc021625ce13c2d76130aa565b60405160200161182891815260200190565b60408051808303601f1901815291815281516020928301205f9687529290921681528185209585529490945250502090565b5f818060200190518101906102db9190613180565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156118cd576040517fbf463fe9000000000000000000000000000000000000000000000000000000008152600481018490526024016107c8565b5f6108906118e46118de865f611c55565b85611caf565b5f611d11565b5f6118f3610a21565b90505f5b8351811015611942576119248685838151811061191657611916612fa3565b602002602001015184611d53565b61193a8585838151811061191657611916612fa3565b6001016118f7565b506105a785858585611e55565b6001600160a01b0384163b15610941576040517fbc197c810000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063bc197c81906119ac9089908990889088908890600401613197565b6020604051808303815f875af19250505080156119e6575060408051601f3d908101601f191682019092526119e3918101906131f4565b60015b611a4d573d808015611a13576040519150601f19603f3d011682016040523d82523d5f602084013e611a18565b606091505b5080515f03611a4557604051632bfa23e760e11b81526001600160a01b03861660048201526024016107c8565b805160208201fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c81000000000000000000000000000000000000000000000000000000001461046157604051632bfa23e760e11b81526001600160a01b03861660048201526024016107c8565b6001600160a01b0384163b15610941576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e6190611b17908990899088908890889060040161320f565b6020604051808303815f875af1925050508015611b51575060408051601f3d908101601f19168201909252611b4e918101906131f4565b60015b611b7e573d808015611a13576040519150601f19603f3d011682016040523d82523d5f602084013e611a18565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461046157604051632bfa23e760e11b81526001600160a01b03861660048201526024016107c8565b5f611bf4610ffa565b5468010000000000000000900460ff16919050565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45007f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4502610ee583826132cd565b5f805f611c628585611f08565b9150915080611ca7576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016107c8565b509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480611cf48686868661200e565b915091505f611d03838361212d565b9a9950505050505050505050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d611d4582828761218b565b9350935050505b9250929050565b6001600160a01b038316611d6657505050565b5f611d6f61121f565b6001600160a01b0385165f90815260208281526040808320878452909152812054919250611d9d868661120a565b90505f80611dac838588611280565b91509150838103611dc1575050505050505050565b6001600160a01b0388165f908152602086815260408083208a84529091529020819055818314611df657611df6888884612373565b60408051858152602081018390529081018490526060810183905287906001600160a01b038a16907f956b049289f8dbe8716375414d9fa6bf32cde65ec1b7e102623775cacc66a6999060800160405180910390a35050505050505050565b5f611e5e612387565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc200546040517fe5be7d900000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063e5be7d9090611ecf9084908990899089908990600401613389565b5f604051808303815f87803b158015611ee6575f80fd5b505af1158015611ef8573d5f803e3d5ffd5b505050506105a785858585612408565b5f601b83900b8314838382611f6c577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515611f4c57620186a0860595506005850194505b8586601b0b14611f6757600a86059550846001019450611f4c565b611f82565b855f03611f8257505f925060019150611d4c9050565b848560030b14611fde575f851215611fa257505f9250829150611d4c9050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016107c8565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f8085158415178015612026575f92505f9150612123565b61203084876133ce565b91505f61203c8861266c565b90505f6120488761266c565b90505f6120558383612695565b5090505f6f0785ee10d5da46d900f436a00000000082111561208a576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156120ab57670de0b6b3a7640000820491506012015b633b9aca008211156120c457633b9aca00820491506009015b6127108211156120d957612710820491506004015b81156120ed57600a820491506001016120d9565b6120f781876133ce565b95506121198b8a612113878761210e87600a6134d5565b6126b1565b89612796565b9097509550505050505b5094509492505050565b5f805f61213a8585611f08565b915091508015801561214a575081155b15611ca7576040517f8eba4d0700000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016107c8565b5f805f8512156121d1576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016107c8565b845f036121e357505f905060016114d5565b8460ff841685018581121561222e576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016107c8565b5f805f831215612298577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb383121561226f575f8095509550505050506114d5565b825f03600a0a915081848161228657612286613052565b04955050840290911491506114d59050565b5f83131561236357604d8313156122ee576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff881660448201526064016107c8565b82600a0a9150815f198161230457612304613052565b04841115612351576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff881660448201526064016107c8565b50919091029250600191506114d59050565b83600195509550505050506114d5565b5f61237e84846117e6565b91909155505050565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201545f907fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc200906001600160a01b0316806123e357339250505090565b6001909101805473ffffffffffffffffffffffffffffffffffffffff19169055919050565b805182517f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500911461247257825182516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016107c8565b335f5b845181101561258d576020818102868101820151908601909101516001600160a01b0389161561253f575f828152602086815260408083206001600160a01b038d16845290915290205481811015612519576040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038b1660048201526024810182905260448101839052606481018490526084016107c8565b5f838152602087815260408083206001600160a01b038e16845290915290209082900390555b6001600160a01b03881615612583575f828152602086815260408083206001600160a01b038c1684529091528120805483929061257d908490613137565b90915550505b5050600101612475565b50835160010361260d5760208401515f906020850151909150866001600160a01b0316886001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516125fe929190918252602082015260400190565b60405180910390a45050610941565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161265c9291906134e0565b60405180910390a4505050505050565b5f8082121561269157600160ff1b820361268b5750600160ff1b919050565b505f0390565b5090565b5f805f1983850993909202808410938190039390930393915050565b5f805f6126be8686612695565b91509150815f036126e2578381816126d8576126d8613052565b0492505050610ad4565b83821061272c576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016107c8565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215612844577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115612831576127f57f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001613137565b84036128095750600160ff1b90508161287d565b612814600a8561314a565b61281d90613504565b6128288460016133ce565b9150915061287d565b61283a84613504565b839150915061287d565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8411156128775761281d600a8561314a565b50829050815b94509492505050565b6001600160a01b0381168114610b3f575f80fd5b5f80604083850312156128ab575f80fd5b82356128b681612886565b946020939093013593505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610b3f575f80fd5b5f60208284031215612901575f80fd5b8135610ad4816128c4565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156129495761294961290c565b604052919050565b5f67ffffffffffffffff82111561296a5761296a61290c565b50601f01601f191660200190565b5f82601f830112612987575f80fd5b813561299a61299582612951565b612920565b8181528460208386010111156129ae575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f8060c087890312156129df575f80fd5b86356129ea81612886565b955060208701356129fa81612886565b94506040870135612a0a81612886565b9350606087013592506080870135915060a087013567ffffffffffffffff811115612a33575f80fd5b612a3f89828a01612978565b9150509295509295509295565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6102d86020830184612a4c565b5f60208284031215612a9c575f80fd5b5035919050565b5f8060408385031215612ab4575f80fd5b82359150602083013567ffffffffffffffff811115612ad1575f80fd5b612add85828601612978565b9150509250929050565b5f67ffffffffffffffff821115612b0057612b0061290c565b5060051b60200190565b5f82601f830112612b19575f80fd5b81356020612b2961299583612ae7565b8083825260208201915060208460051b870101935086841115612b4a575f80fd5b602086015b84811015612b665780358352918301918301612b4f565b509695505050505050565b5f805f805f60a08688031215612b85575f80fd5b8535612b9081612886565b94506020860135612ba081612886565b9350604086013567ffffffffffffffff80821115612bbc575f80fd5b612bc889838a01612b0a565b94506060880135915080821115612bdd575f80fd5b612be989838a01612b0a565b93506080880135915080821115612bfe575f80fd5b50612c0b88828901612978565b9150509295509295909350565b5f60208284031215612c28575f80fd5b813567ffffffffffffffff811115612c3e575f80fd5b612c4a84828501612978565b949350505050565b5f8060408385031215612c63575f80fd5b823567ffffffffffffffff80821115612c7a575f80fd5b818501915085601f830112612c8d575f80fd5b81356020612c9d61299583612ae7565b82815260059290921b84018101918181019089841115612cbb575f80fd5b948201945b83861015612ce2578535612cd381612886565b82529482019490820190612cc0565b96505086013592505080821115612cf7575f80fd5b50612add85828601612b0a565b5f815180845260208085019450602084015f5b83811015612d3357815187529582019590820190600101612d17565b509495945050505050565b602081525f6102d86020830184612d04565b5f805f805f60a08688031215612d64575f80fd5b8535612d6f81612886565b94506020860135612d7f81612886565b93506040860135925060608601359150608086013567ffffffffffffffff811115612da8575f80fd5b612c0b88828901612978565b5f8060408385031215612dc5575f80fd5b8235612dd081612886565b915060208301358015158114612de4575f80fd5b809150509250929050565b5f8060408385031215612e00575f80fd5b8235612e0b81612886565b91506020830135612de481612886565b5f81518060208401855e5f93019283525090919050565b5f612c4a612e408386612e1b565b84612e1b565b7f7b22646563696d616c73223a000000000000000000000000000000000000000081525f612e77600c830187612e1b565b7f2c226465736372697074696f6e223a2231206f6620746865736520726563656981527f7074732063616e206265206275726e656420616c6f6e677369646520312000006020820152612ecd603e820187612e1b565b90507f20746f2072656465656d200000000000000000000000000000000000000000008152612eff600b820186612e1b565b90507f2066726f6d20746865207661756c742e222c000000000000000000000000000081527f226e616d65223a220000000000000000000000000000000000000000000000006012820152612f57601a820185612e1b565b7f227d0000000000000000000000000000000000000000000000000000000000008152600201979650505050505050565b5f60208284031215612f98575f80fd5b8151610ad481612886565b634e487b7160e01b5f52603260045260245ffd5b5f612fc461299584612951565b9050828152838383011115612fd7575f80fd5b8282602083015e5f602084830101529392505050565b5f60208284031215612ffd575f80fd5b815167ffffffffffffffff811115613013575f80fd5b8201601f81018413613023575f80fd5b612c4a84825160208401612fb7565b5f60208284031215613042575f80fd5b815160ff81168114610ad4575f80fd5b634e487b7160e01b5f52601260045260245ffd5b6001600160a01b0384168152826020820152606060408201525f61308d6060830184612a4c565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156102db576102db613096565b8381526020810183905260608101600383106130e757634e487b7160e01b5f52602160045260245ffd5b826040830152949350505050565b5f805f60608486031215613107575f80fd5b8351925060208401519150604084015167ffffffffffffffff8116811461312c575f80fd5b809150509250925092565b808201808211156102db576102db613096565b5f8261316457634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176102db576102db613096565b5f60208284031215613190575f80fd5b5051919050565b5f6001600160a01b03808816835280871660208401525060a060408301526131c260a0830186612d04565b82810360608401526131d48186612d04565b905082810360808401526131e88185612a4c565b98975050505050505050565b5f60208284031215613204575f80fd5b8151610ad4816128c4565b5f6001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261324660a0830184612a4c565b979650505050505050565b600181811c9082168061326557607f821691505b60208210810361328357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610ee557805f5260205f20601f840160051c810160208510156132ae5750805b601f840160051c820191505b818110156105a7575f81556001016132ba565b815167ffffffffffffffff8111156132e7576132e761290c565b6132fb816132f58454613251565b84613289565b602080601f83116001811461332e575f84156133175750858301515b5f19600386901b1c1916600185901b178555610941565b5f85815260208120601f198616915b8281101561335c5788860151825594840194600190910190840161333d565b508582101561337957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6001600160a01b038088168352808716602084015280861660408401525060a060608301526133bc60a0830185612d04565b82810360808401526131e88185612d04565b8082018281125f8312801582168215821617156133ed576133ed613096565b505092915050565b600181815b8085111561342f57815f190482111561341557613415613096565b8085161561342257918102915b93841c93908002906133fa565b509250929050565b5f82613445575060016102db565b8161345157505f6102db565b816001811461346757600281146134715761348d565b60019150506102db565b60ff84111561348257613482613096565b50506001821b6102db565b5060208310610133831016604e8410600b84101617156134b0575081810a6102db565b6134ba83836133f5565b805f19048211156134cd576134cd613096565b029392505050565b5f6102d88383613437565b604081525f6134f26040830185612d04565b828103602084015261308d8185612d04565b5f600160ff1b820361268b5761268b61309656"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b50600436106100fa575f3560e01c8063481c6a7511610093578063a22cb46511610063578063a22cb46514610232578063c2530e3914610245578063e985e9c514610258578063f242432a146102b2575f80fd5b8063481c6a75146101bd5780634e1273f4146101f75780636d5b3f781461021757806395d89b411461022a575f80fd5b80630e89341c116100ce5780630e89341c14610171578063177769cb146101845780632eb2c2d614610197578063439fab91146101aa575f80fd5b8062fdd58e146100fe57806301ffc9a714610124578063043fa9871461014757806306fdde031461015c575b5f80fd5b61011161010c366004612a49565b6102c5565b6040519081526020015b60405180910390f35b610137610132366004612aa0565b6102e1565b604051901515815260200161011b565b61015a610155366004612b79565b6103c3565b005b61016461046a565b60405161011b9190612c29565b61016461017f366004612c3b565b6104cf565b61015a610192366004612c52565b610580565b61015a6101a5366004612d20565b61058f565b6101116101b8366004612dc7565b6105ae565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc200546040516001600160a01b03909116815260200161011b565b61020a610205366004612e01565b6107ae565b60405161011b9190612eed565b61015a610225366004612eff565b6108c5565b610164610975565b61015a610240366004612f63565b6109c6565b61015a610253366004612eff565b6109d1565b610137610266366004612f9e565b6001600160a01b039182165f9081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45016020908152604080832093909416825291909152205460ff1690565b61015a6102c0366004612eff565b610a37565b5f6102d883836102d3610a4d565b610ab3565b90505b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061037357507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b806102db57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146102db565b6103cb610b07565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055856104208686868686610b6e565b6104617fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19169055565b50505050505050565b6060610474610c25565b6040518060400160405280600881526020017f20526563656970740000000000000000000000000000000000000000000000008152506040516020016104bb929190612fe1565b604051602081830303815290604052905090565b60605f6104e56104dd610cd3565b60ff16610d78565b6104ed610c25565b6104f5610e15565b6104fd61046a565b6040516020016105109493929190612ff5565b60408051601f19818403018152828201909152601d82527f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000006020830152915061055882610ef5565b604051602001610569929190612fe1565b604051602081830303815290604052915050919050565b61058b338383610f01565b5050565b61059a335b86610f49565b6105a78585858585610ff9565b5050505050565b5f806105b861108c565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156105e45750825b90505f8267ffffffffffffffff1660011480156106005750303b155b90508115801561060e575080155b15610645576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156106a65784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6106bd60405180602001604052805f8152506110b4565b5f7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc20090505f888060200190518101906106f69190613137565b825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039190911617909155507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc3955083156107a45784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050919050565b606081518351146107fd57815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044015b60405180910390fd5b5f610806610a4d565b90505f845167ffffffffffffffff81111561082357610823612abb565b60405190808252806020026020018201604052801561084c578160200160208202803683370190505b5090505f5b85518110156108bc5761089786828151811061086f5761086f613152565b602002602001015186838151811061088957610889613152565b602002602001015185610ab3565b8282815181106108a9576108a9613152565b6020908102919091010152600101610851565b50949350505050565b6108cd610b07565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03871617905584610920868584610f01565b61092c858585856110c5565b61096d7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19169055565b505050505050565b606061097f610c25565b6040518060400160405280600581526020017f20524350540000000000000000000000000000000000000000000000000000008152506040516020016104bb929190612fe1565b61058b33838361113a565b6109d9610b07565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03871617905584610a2c868584610f01565b61092c85858561124e565b610a4033610594565b6105a78585858585610b6e565b5f306001600160a01b031663481c6a756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a8a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aae9190613137565b905090565b5f80610abf85856112cf565b90505f610aca6112e4565b6001600160a01b0387165f90815260209182526040808220888352909252908120549150610af9838387611345565b5093505050505b9392505050565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc20080546001600160a01b03163314610b6b576040517fc0b2335a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b6001600160a01b038416610bb0576040517f57f447ce0000000000000000000000000000000000000000000000000000000081525f60048201526024016107f4565b6001600160a01b038516610bf2576040517f01a835140000000000000000000000000000000000000000000000000000000081525f60048201526024016107f4565b6040805160018082526020820186905281830190815260608201859052608082019092529061046187878484875f6115ed565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc2008054604080517f95d89b410000000000000000000000000000000000000000000000000000000081529051606093926001600160a01b0316916395d89b41916004808301925f9291908290030181865afa158015610ca6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ccd919081019061319c565b91505090565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc2008054604080517f313ce56700000000000000000000000000000000000000000000000000000000815290515f93926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015610d54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ccd91906131e1565b60605f610d8483611645565b60010190505f8167ffffffffffffffff811115610da357610da3612abb565b6040519080825280601f01601f191660200182016040528015610dcd576020820181803683370190505b5090508181016020015b5f19017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610dd757509392505050565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc2008054604080517f38d52e0f0000000000000000000000000000000000000000000000000000000081529051606093926001600160a01b0316916338d52e0f9160048083019260209291908290030181865afa158015610e97573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ebb9190613137565b6001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610ca6573d5f803e3d5ffd5b60606102db825f611726565b805115610f44577fd66d6a9810a5cef78b704e7e04334961e997c81d337f029f74637f060f3d8d65838383604051610f3b93929190613215565b60405180910390a15b505050565b816001600160a01b0316816001600160a01b031614158015610faf57506001600160a01b038082165f9081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209386168352929052205460ff16155b1561058b576040517fe237d9220000000000000000000000000000000000000000000000000000000081526001600160a01b038084166004830152821660248201526044016107f4565b6001600160a01b03841661103b576040517f57f447ce0000000000000000000000000000000000000000000000000000000081525f60048201526024016107f4565b6001600160a01b03851661107d576040517f01a835140000000000000000000000000000000000000000000000000000000081525f60048201526024016107f4565b6105a7858585858560016115ed565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006102db565b6110bc6118a5565b610b6b816118e5565b6001600160a01b038416611107576040517f57f447ce0000000000000000000000000000000000000000000000000000000081525f60048201526024016107f4565b6040805160018082526020820186905281830190815260608201859052608082019092529061096d5f87848487846115ed565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45006001600160a01b03841661119d576040517f3e31884e0000000000000000000000000000000000000000000000000000000081525f60048201526024016107f4565b6001600160a01b0383166111df576040517fced3e1000000000000000000000000000000000000000000000000000000000081525f60048201526024016107f4565b6001600160a01b038481165f818152600184016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b6001600160a01b038316611290576040517f01a835140000000000000000000000000000000000000000000000000000000081525f60048201526024016107f4565b604080516001808252602082018590528183019081526060820184905260a082019092525f608082018181529192916105a791879185908590836115ed565b5f806112db84846118f6565b54949350505050565b5f8060ff1961131460017fedb99b3af8e1c50d494d6f1b4c75245a0b733cb90baa42bfe0e2f5bc8b000f82613259565b60405160200161132691815260200190565b60408051601f1981840301815291905280516020909101201692915050565b6040517f79ba43050000000000000000000000000000000000000000000000000000000081525f9081908490829081906001600160a01b038716906379ba43059061139a90869060039060019060040161326c565b606060405180830381865afa1580156113b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d991906132a4565b5091509150875f03611496575b5f198214611488576040517f79ba430500000000000000000000000000000000000000000000000000000000815291925082916001600160a01b038716906379ba43059061143e90859060039060019060040161326c565b606060405180830381865afa158015611459573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147d91906132a4565b5090925090506113e6565b5f83945094505050506115e5565b875b5f1983146115dd5782935060028203611548576040517fb21a2494000000000000000000000000000000000000000000000000000000008152600481018490525f90611538906001600160a01b038a169063b21a2494906024015f60405180830381865afa15801561150c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611533919081019061319c565b61196a565b9050611544828261197f565b9150505b6040517f79ba43050000000000000000000000000000000000000000000000000000000081526001600160a01b038816906379ba43059061159390869060039060019060040161326c565b606060405180830381865afa1580156115ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d291906132a4565b509093509150611498565b945091925050505b935093915050565b6115f9868686866119fa565b6001600160a01b0385161561096d573381156116225761161d818888888888611a5f565b610461565b6020858101519085015161163a838a8a85858a611bfc565b505050505050505050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061168d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106116b9576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106116d757662386f26fc10000830492506010015b6305f5e10083106116ef576305f5e100830492506008015b612710831061170357612710830492506004015b60648310611715576064830492506002015b600a83106102db5760010192915050565b606082515f03611744575060408051602081019091525f81526102db565b5f826117745760038451600261175a91906132e6565b61176491906132f9565b61176f906004613318565b611799565b6003845160046117849190613318565b61178f9060026132e6565b61179991906132f9565b905060405191507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f5261067083027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f18603f526020820181810185865187016020810180515f82525b82841015611857576003840193508351603f8160121c16518753600187019650603f81600c1c16518753600187019650603f8160061c16518753600187019650603f811651875350600186019550611804565b9052508590506118985760038651066001811461187b576002811461188e57611896565b603d6001840353603d6002840353611896565b603d60018403535b505b9183525060405292915050565b6118ad611d46565b6118e3576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6118ed6118a5565b610b6b81611d64565b5f8060ff1961192660017f3a8e79826d53842322cdcc810d4a989eb01ac46cfabfd48dcc021625ce13c2d7613259565b60405160200161193891815260200190565b60408051808303601f1901815291815281516020928301205f9687529290921681528185209585529490945250502090565b5f818060200190518101906102db919061332f565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156119dd576040517fbf463fe9000000000000000000000000000000000000000000000000000000008152600481018490526024016107f4565b5f6108bc6119f46119ee865f611db0565b85611e0a565b5f611e6c565b5f611a03610a4d565b90505f5b8351811015611a5257611a3486858381518110611a2657611a26613152565b602002602001015184611eae565b611a4a85858381518110611a2657611a26613152565b600101611a07565b506105a785858585611fb0565b6001600160a01b0384163b1561096d576040517fbc197c810000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063bc197c8190611abc9089908990889088908890600401613346565b6020604051808303815f875af1925050508015611af6575060408051601f3d908101601f19168201909252611af3918101906133a3565b60015b611b76573d808015611b23576040519150601f19603f3d011682016040523d82523d5f602084013e611b28565b606091505b5080515f03611b6e576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024016107f4565b805160208201fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014610461576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024016107f4565b6001600160a01b0384163b1561096d576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e6190611c5990899089908890889088906004016133be565b6020604051808303815f875af1925050508015611c93575060408051601f3d908101601f19168201909252611c90918101906133a3565b60015b611cc0573d808015611b23576040519150601f19603f3d011682016040523d82523d5f602084013e611b28565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014610461576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024016107f4565b5f611d4f61108c565b5468010000000000000000900460ff16919050565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45007f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4502610f44838261347c565b5f805f611dbd8585612063565b9150915080611e02576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016107f4565b509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480611e4f86868686612169565b915091505f611e5e8383612288565b9a9950505050505050505050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d611ea08282876122e6565b9350935050505b9250929050565b6001600160a01b038316611ec157505050565b5f611eca6112e4565b6001600160a01b0385165f90815260208281526040808320878452909152812054919250611ef886866112cf565b90505f80611f07838588611345565b91509150838103611f1c575050505050505050565b6001600160a01b0388165f908152602086815260408083208a84529091529020819055818314611f5157611f518888846124ce565b60408051858152602081018390529081018490526060810183905287906001600160a01b038a16907f956b049289f8dbe8716375414d9fa6bf32cde65ec1b7e102623775cacc66a6999060800160405180910390a35050505050505050565b5f611fb96124e2565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc200546040517fe5be7d900000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063e5be7d909061202a9084908990899089908990600401613538565b5f604051808303815f87803b158015612041575f80fd5b505af1158015612053573d5f803e3d5ffd5b505050506105a785858585612563565b5f601b83900b83148383826120c7577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156120a757620186a0860595506005850194505b8586601b0b146120c257600a860595508460010194506120a7565b6120dd565b855f036120dd57505f925060019150611ea79050565b848560030b14612139575f8512156120fd57505f9250829150611ea79050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016107f4565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f8085158415178015612181575f92505f915061227e565b61218b848761357d565b91505f612197886127c7565b90505f6121a3876127c7565b90505f6121b08383612828565b5090505f6f0785ee10d5da46d900f436a0000000008211156121e5576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a764000082111561220657670de0b6b3a7640000820491506012015b633b9aca0082111561221f57633b9aca00820491506009015b61271082111561223457612710820491506004015b811561224857600a82049150600101612234565b612252818761357d565b95506122748b8a61226e878761226987600a613684565b612844565b89612929565b9097509550505050505b5094509492505050565b5f805f6122958585612063565b91509150801580156122a5575081155b15611e02576040517f8eba4d0700000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016107f4565b5f805f85121561232c576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016107f4565b845f0361233e57505f905060016115e5565b8460ff8416850185811215612389576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016107f4565b5f805f8312156123f3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb38312156123ca575f8095509550505050506115e5565b825f03600a0a91508184816123e1576123e1613201565b04955050840290911491506115e59050565b5f8313156124be57604d831315612449576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff881660448201526064016107f4565b82600a0a9150815f198161245f5761245f613201565b048411156124ac576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff881660448201526064016107f4565b50919091029250600191506115e59050565b83600195509550505050506115e5565b5f6124d984846118f6565b91909155505050565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201545f907fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc200906001600160a01b03168061253e57339250505090565b6001909101805473ffffffffffffffffffffffffffffffffffffffff19169055919050565b805182517f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450091146125cd57825182516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016107f4565b335f5b84518110156126e8576020818102868101820151908601909101516001600160a01b0389161561269a575f828152602086815260408083206001600160a01b038d16845290915290205481811015612674576040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038b1660048201526024810182905260448101839052606481018490526084016107f4565b5f838152602087815260408083206001600160a01b038e16845290915290209082900390555b6001600160a01b038816156126de575f828152602086815260408083206001600160a01b038c168452909152812080548392906126d89084906132e6565b90915550505b50506001016125d0565b5083516001036127685760208401515f906020850151909150866001600160a01b0316886001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612759929190918252602082015260400190565b60405180910390a4505061096d565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516127b792919061368f565b60405180910390a4505050505050565b5f80821215612824577f8000000000000000000000000000000000000000000000000000000000000000820361281e57507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b5f805f1983850993909202808410938190039390930393915050565b5f805f6128518686612828565b91509150815f036128755783818161286b5761286b613201565b0492505050610b00565b8382106128bf576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016107f4565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f85871812156129f3577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8411156129e0576129887f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60016132e6565b84036129b857507f8000000000000000000000000000000000000000000000000000000000000000905081612a2c565b6129c3600a856132f9565b6129cc906136b3565b6129d784600161357d565b91509150612a2c565b6129e9846136b3565b8391509150612a2c565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115612a26576129cc600a856132f9565b50829050815b94509492505050565b6001600160a01b0381168114610b6b575f80fd5b5f8060408385031215612a5a575f80fd5b8235612a6581612a35565b946020939093013593505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610b6b575f80fd5b5f60208284031215612ab0575f80fd5b8135610b0081612a73565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612af857612af8612abb565b604052919050565b5f67ffffffffffffffff821115612b1957612b19612abb565b50601f01601f191660200190565b5f82601f830112612b36575f80fd5b8135612b49612b4482612b00565b612acf565b818152846020838601011115612b5d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f8060c08789031215612b8e575f80fd5b8635612b9981612a35565b95506020870135612ba981612a35565b94506040870135612bb981612a35565b9350606087013592506080870135915060a087013567ffffffffffffffff811115612be2575f80fd5b612bee89828a01612b27565b9150509295509295509295565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6102d86020830184612bfb565b5f60208284031215612c4b575f80fd5b5035919050565b5f8060408385031215612c63575f80fd5b82359150602083013567ffffffffffffffff811115612c80575f80fd5b612c8c85828601612b27565b9150509250929050565b5f67ffffffffffffffff821115612caf57612caf612abb565b5060051b60200190565b5f82601f830112612cc8575f80fd5b81356020612cd8612b4483612c96565b8083825260208201915060208460051b870101935086841115612cf9575f80fd5b602086015b84811015612d155780358352918301918301612cfe565b509695505050505050565b5f805f805f60a08688031215612d34575f80fd5b8535612d3f81612a35565b94506020860135612d4f81612a35565b9350604086013567ffffffffffffffff80821115612d6b575f80fd5b612d7789838a01612cb9565b94506060880135915080821115612d8c575f80fd5b612d9889838a01612cb9565b93506080880135915080821115612dad575f80fd5b50612dba88828901612b27565b9150509295509295909350565b5f60208284031215612dd7575f80fd5b813567ffffffffffffffff811115612ded575f80fd5b612df984828501612b27565b949350505050565b5f8060408385031215612e12575f80fd5b823567ffffffffffffffff80821115612e29575f80fd5b818501915085601f830112612e3c575f80fd5b81356020612e4c612b4483612c96565b82815260059290921b84018101918181019089841115612e6a575f80fd5b948201945b83861015612e91578535612e8281612a35565b82529482019490820190612e6f565b96505086013592505080821115612ea6575f80fd5b50612c8c85828601612cb9565b5f815180845260208085019450602084015f5b83811015612ee257815187529582019590820190600101612ec6565b509495945050505050565b602081525f6102d86020830184612eb3565b5f805f805f60a08688031215612f13575f80fd5b8535612f1e81612a35565b94506020860135612f2e81612a35565b93506040860135925060608601359150608086013567ffffffffffffffff811115612f57575f80fd5b612dba88828901612b27565b5f8060408385031215612f74575f80fd5b8235612f7f81612a35565b915060208301358015158114612f93575f80fd5b809150509250929050565b5f8060408385031215612faf575f80fd5b8235612fba81612a35565b91506020830135612f9381612a35565b5f81518060208401855e5f93019283525090919050565b5f612df9612fef8386612fca565b84612fca565b7f7b22646563696d616c73223a000000000000000000000000000000000000000081525f613026600c830187612fca565b7f2c226465736372697074696f6e223a2231206f6620746865736520726563656981527f7074732063616e206265206275726e656420616c6f6e67736964652031200000602082015261307c603e820187612fca565b90507f20746f2072656465656d2000000000000000000000000000000000000000000081526130ae600b820186612fca565b90507f2066726f6d20746865207661756c742e222c000000000000000000000000000081527f226e616d65223a220000000000000000000000000000000000000000000000006012820152613106601a820185612fca565b7f227d0000000000000000000000000000000000000000000000000000000000008152600201979650505050505050565b5f60208284031215613147575f80fd5b8151610b0081612a35565b634e487b7160e01b5f52603260045260245ffd5b5f613173612b4484612b00565b9050828152838383011115613186575f80fd5b8282602083015e5f602084830101529392505050565b5f602082840312156131ac575f80fd5b815167ffffffffffffffff8111156131c2575f80fd5b8201601f810184136131d2575f80fd5b612df984825160208401613166565b5f602082840312156131f1575f80fd5b815160ff81168114610b00575f80fd5b634e487b7160e01b5f52601260045260245ffd5b6001600160a01b0384168152826020820152606060408201525f61323c6060830184612bfb565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156102db576102db613245565b83815260208101839052606081016003831061329657634e487b7160e01b5f52602160045260245ffd5b826040830152949350505050565b5f805f606084860312156132b6575f80fd5b8351925060208401519150604084015167ffffffffffffffff811681146132db575f80fd5b809150509250925092565b808201808211156102db576102db613245565b5f8261331357634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176102db576102db613245565b5f6020828403121561333f575f80fd5b5051919050565b5f6001600160a01b03808816835280871660208401525060a0604083015261337160a0830186612eb3565b82810360608401526133838186612eb3565b905082810360808401526133978185612bfb565b98975050505050505050565b5f602082840312156133b3575f80fd5b8151610b0081612a73565b5f6001600160a01b03808816835280871660208401525084604083015283606083015260a060808301526133f560a0830184612bfb565b979650505050505050565b600181811c9082168061341457607f821691505b60208210810361343257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610f4457805f5260205f20601f840160051c8101602085101561345d5750805b601f840160051c820191505b818110156105a7575f8155600101613469565b815167ffffffffffffffff81111561349657613496612abb565b6134aa816134a48454613400565b84613438565b602080601f8311600181146134dd575f84156134c65750858301515b5f19600386901b1c1916600185901b17855561096d565b5f85815260208120601f198616915b8281101561350b578886015182559484019460019091019084016134ec565b508582101561352857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6001600160a01b038088168352808716602084015280861660408401525060a0606083015261356b60a0830185612eb3565b82810360808401526133978185612eb3565b8082018281125f83128015821682158216171561359c5761359c613245565b505092915050565b600181815b808511156135de57815f19048211156135c4576135c4613245565b808516156135d157918102915b93841c93908002906135a9565b509250929050565b5f826135f4575060016102db565b8161360057505f6102db565b816001811461361657600281146136205761363c565b60019150506102db565b60ff84111561363157613631613245565b50506001821b6102db565b5060208310610133831016604e8410600b841016171561365f575081810a6102db565b61366983836135a4565b805f190482111561367c5761367c613245565b029392505050565b5f6102d883836135e6565b604081525f6136a16040830185612eb3565b828103602084015261323c8185612eb3565b5f7f8000000000000000000000000000000000000000000000000000000000000000820361281e5761281e61324556"; + hex"608060405234801561000f575f80fd5b50600436106100fa575f3560e01c8063481c6a7511610093578063a22cb46511610063578063a22cb46514610232578063c2530e3914610245578063e985e9c514610258578063f242432a146102b2575f80fd5b8063481c6a75146101bd5780634e1273f4146101f75780636d5b3f781461021757806395d89b411461022a575f80fd5b80630e89341c116100ce5780630e89341c14610171578063177769cb146101845780632eb2c2d614610197578063439fab91146101aa575f80fd5b8062fdd58e146100fe57806301ffc9a714610124578063043fa9871461014757806306fdde031461015c575b5f80fd5b61011161010c36600461289a565b6102c5565b6040519081526020015b60405180910390f35b6101376101323660046128f1565b6102e1565b604051901515815260200161011b565b61015a6101553660046129ca565b6103c3565b005b61016461046a565b60405161011b9190612a7a565b61016461017f366004612a8c565b6104cf565b61015a610192366004612aa3565b610580565b61015a6101a5366004612b71565b61058f565b6101116101b8366004612c18565b6105ae565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc200546040516001600160a01b03909116815260200161011b565b61020a610205366004612c52565b610782565b60405161011b9190612d3e565b61015a610225366004612d50565b610899565b610164610949565b61015a610240366004612db4565b61099a565b61015a610253366004612d50565b6109a5565b610137610266366004612def565b6001600160a01b039182165f9081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45016020908152604080832093909416825291909152205460ff1690565b61015a6102c0366004612d50565b610a0b565b5f6102d883836102d3610a21565b610a87565b90505b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061037357507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b806102db57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146102db565b6103cb610adb565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055856104208686868686610b42565b6104617fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19169055565b50505050505050565b6060610474610bc6565b6040518060400160405280600881526020017f20526563656970740000000000000000000000000000000000000000000000008152506040516020016104bb929190612e32565b604051602081830303815290604052905090565b60605f6104e56104dd610c74565b60ff16610d19565b6104ed610bc6565b6104f5610db6565b6104fd61046a565b6040516020016105109493929190612e46565b60408051601f19818403018152828201909152601d82527f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000006020830152915061055882610e96565b604051602001610569929190612e32565b604051602081830303815290604052915050919050565b61058b338383610ea2565b5050565b61059a335b86610eea565b6105a78585858585610f9a565b5050505050565b5f806105b8610ffa565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156105e45750825b90505f8267ffffffffffffffff1660011480156106005750303b155b90508115801561060e575080155b15610645576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561069057845468ff00000000000000001916680100000000000000001785555b6106a760405180602001604052805f815250611022565b5f7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc20090505f888060200190518101906106e09190612f88565b825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039190911617909155507fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc39550831561077857845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050919050565b606081518351146107d157815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044015b60405180910390fd5b5f6107da610a21565b90505f845167ffffffffffffffff8111156107f7576107f761290c565b604051908082528060200260200182016040528015610820578160200160208202803683370190505b5090505f5b85518110156108905761086b86828151811061084357610843612fa3565b602002602001015186838151811061085d5761085d612fa3565b602002602001015185610a87565b82828151811061087d5761087d612fa3565b6020908102919091010152600101610825565b50949350505050565b6108a1610adb565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038716179055846108f4868584610ea2565b61090085858585611033565b6109417fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19169055565b505050505050565b6060610953610bc6565b6040518060400160405280600581526020017f20524350540000000000000000000000000000000000000000000000000000008152506040516020016104bb929190612e32565b61058b33838361108f565b6109ad610adb565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03871617905584610a00868584610ea2565b6109008585856111a3565b610a1433610594565b6105a78585858585610b42565b5f306001600160a01b031663481c6a756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a5e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a829190612f88565b905090565b5f80610a93858561120a565b90505f610a9e61121f565b6001600160a01b0387165f90815260209182526040808220888352909252908120549150610acd838387611280565b5093505050505b9392505050565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc20080546001600160a01b03163314610b3f576040517fc0b2335a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b6001600160a01b038416610b6b57604051632bfa23e760e11b81525f60048201526024016107c8565b6001600160a01b038516610b9357604051626a0d4560e21b81525f60048201526024016107c8565b6040805160018082526020820186905281830190815260608201859052608082019092529061046187878484875f6114dd565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc2008054604080517f95d89b410000000000000000000000000000000000000000000000000000000081529051606093926001600160a01b0316916395d89b41916004808301925f9291908290030181865afa158015610c47573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c6e9190810190612fed565b91505090565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc2008054604080517f313ce56700000000000000000000000000000000000000000000000000000000815290515f93926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015610cf5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c6e9190613032565b60605f610d2583611535565b60010190505f8167ffffffffffffffff811115610d4457610d4461290c565b6040519080825280601f01601f191660200182016040528015610d6e576020820181803683370190505b5090508181016020015b5f19017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610d7857509392505050565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc2008054604080517f38d52e0f0000000000000000000000000000000000000000000000000000000081529051606093926001600160a01b0316916338d52e0f9160048083019260209291908290030181865afa158015610e38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5c9190612f88565b6001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610c47573d5f803e3d5ffd5b60606102db825f611616565b805115610ee5577fd66d6a9810a5cef78b704e7e04334961e997c81d337f029f74637f060f3d8d65838383604051610edc93929190613066565b60405180910390a15b505050565b816001600160a01b0316816001600160a01b031614158015610f5057506001600160a01b038082165f9081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209386168352929052205460ff16155b1561058b576040517fe237d9220000000000000000000000000000000000000000000000000000000081526001600160a01b038084166004830152821660248201526044016107c8565b6001600160a01b038416610fc357604051632bfa23e760e11b81525f60048201526024016107c8565b6001600160a01b038516610feb57604051626a0d4560e21b81525f60048201526024016107c8565b6105a7858585858560016114dd565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006102db565b61102a611795565b610b3f816117d5565b6001600160a01b03841661105c57604051632bfa23e760e11b81525f60048201526024016107c8565b604080516001808252602082018690528183019081526060820185905260808201909252906109415f87848487846114dd565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45006001600160a01b0384166110f2576040517f3e31884e0000000000000000000000000000000000000000000000000000000081525f60048201526024016107c8565b6001600160a01b038316611134576040517fced3e1000000000000000000000000000000000000000000000000000000000081525f60048201526024016107c8565b6001600160a01b038481165f818152600184016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b6001600160a01b0383166111cb57604051626a0d4560e21b81525f60048201526024016107c8565b604080516001808252602082018590528183019081526060820184905260a082019092525f608082018181529192916105a791879185908590836114dd565b5f8061121684846117e6565b54949350505050565b5f8060ff1961124f60017fedb99b3af8e1c50d494d6f1b4c75245a0b733cb90baa42bfe0e2f5bc8b000f826130aa565b60405160200161126191815260200190565b60408051601f1981840301815291905280516020909101201692915050565b6040516379ba430560e01b81525f9081908490829081906001600160a01b038716906379ba4305906112bc9086906003906001906004016130bd565b606060405180830381865afa1580156112d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112fb91906130f5565b5091509150875f0361139f575b5f198214611391576040516379ba430560e01b815291925082916001600160a01b038716906379ba4305906113479085906003906001906004016130bd565b606060405180830381865afa158015611362573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061138691906130f5565b509092509050611308565b5f83945094505050506114d5565b875b5f1983146114cd5782935060028203611451576040517fb21a2494000000000000000000000000000000000000000000000000000000008152600481018490525f90611441906001600160a01b038a169063b21a2494906024015f60405180830381865afa158015611415573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261143c9190810190612fed565b61185a565b905061144d828261186f565b9150505b6040516379ba430560e01b81526001600160a01b038816906379ba4305906114839086906003906001906004016130bd565b606060405180830381865afa15801561149e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c291906130f5565b5090935091506113a1565b945091925050505b935093915050565b6114e9868686866118ea565b6001600160a01b03851615610941573381156115125761150d81888888888861194f565b610461565b6020858101519085015161152a838a8a85858a611aba565b505050505050505050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061157d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115a9576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115c757662386f26fc10000830492506010015b6305f5e10083106115df576305f5e100830492506008015b61271083106115f357612710830492506004015b60648310611605576064830492506002015b600a83106102db5760010192915050565b606082515f03611634575060408051602081019091525f81526102db565b5f826116645760038451600261164a9190613137565b611654919061314a565b61165f906004613169565b611689565b6003845160046116749190613169565b61167f906002613137565b611689919061314a565b905060405191507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f5261067083027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f18603f526020820181810185865187016020810180515f82525b82841015611747576003840193508351603f8160121c16518753600187019650603f81600c1c16518753600187019650603f8160061c16518753600187019650603f8116518753506001860195506116f4565b9052508590506117885760038651066001811461176b576002811461177e57611786565b603d6001840353603d6002840353611786565b603d60018403535b505b9183525060405292915050565b61179d611beb565b6117d3576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6117dd611795565b610b3f81611c09565b5f8060ff1961181660017f3a8e79826d53842322cdcc810d4a989eb01ac46cfabfd48dcc021625ce13c2d76130aa565b60405160200161182891815260200190565b60408051808303601f1901815291815281516020928301205f9687529290921681528185209585529490945250502090565b5f818060200190518101906102db9190613180565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156118cd576040517fbf463fe9000000000000000000000000000000000000000000000000000000008152600481018490526024016107c8565b5f6108906118e46118de865f611c55565b85611caf565b5f611d11565b5f6118f3610a21565b90505f5b8351811015611942576119248685838151811061191657611916612fa3565b602002602001015184611d53565b61193a8585838151811061191657611916612fa3565b6001016118f7565b506105a785858585611e55565b6001600160a01b0384163b15610941576040517fbc197c810000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063bc197c81906119ac9089908990889088908890600401613197565b6020604051808303815f875af19250505080156119e6575060408051601f3d908101601f191682019092526119e3918101906131f4565b60015b611a4d573d808015611a13576040519150601f19603f3d011682016040523d82523d5f602084013e611a18565b606091505b5080515f03611a4557604051632bfa23e760e11b81526001600160a01b03861660048201526024016107c8565b805160208201fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c81000000000000000000000000000000000000000000000000000000001461046157604051632bfa23e760e11b81526001600160a01b03861660048201526024016107c8565b6001600160a01b0384163b15610941576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e6190611b17908990899088908890889060040161320f565b6020604051808303815f875af1925050508015611b51575060408051601f3d908101601f19168201909252611b4e918101906131f4565b60015b611b7e573d808015611a13576040519150601f19603f3d011682016040523d82523d5f602084013e611a18565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461046157604051632bfa23e760e11b81526001600160a01b03861660048201526024016107c8565b5f611bf4610ffa565b5468010000000000000000900460ff16919050565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45007f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4502610ee583826132cd565b5f805f611c628585611f08565b9150915080611ca7576040517f22c9f7bb00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016107c8565b509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480611cf48686868661200e565b915091505f611d03838361212d565b9a9950505050505050505050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d611d4582828761218b565b9350935050505b9250929050565b6001600160a01b038316611d6657505050565b5f611d6f61121f565b6001600160a01b0385165f90815260208281526040808320878452909152812054919250611d9d868661120a565b90505f80611dac838588611280565b91509150838103611dc1575050505050505050565b6001600160a01b0388165f908152602086815260408083208a84529091529020819055818314611df657611df6888884612373565b60408051858152602081018390529081018490526060810183905287906001600160a01b038a16907f956b049289f8dbe8716375414d9fa6bf32cde65ec1b7e102623775cacc66a6999060800160405180910390a35050505050505050565b5f611e5e612387565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc200546040517fe5be7d900000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063e5be7d9090611ecf9084908990899089908990600401613389565b5f604051808303815f87803b158015611ee6575f80fd5b505af1158015611ef8573d5f803e3d5ffd5b505050506105a785858585612408565b5f601b83900b8314838382611f6c577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e1000000000000000000860515611f4c57620186a0860595506005850194505b8586601b0b14611f6757600a86059550846001019450611f4c565b611f82565b855f03611f8257505f925060019150611d4c9050565b848560030b14611fde575f851215611fa257505f9250829150611d4c9050565b6040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016107c8565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f8085158415178015612026575f92505f9150612123565b61203084876133ce565b91505f61203c8861266c565b90505f6120488761266c565b90505f6120558383612695565b5090505f6f0785ee10d5da46d900f436a00000000082111561208a576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156120ab57670de0b6b3a7640000820491506012015b633b9aca008211156120c457633b9aca00820491506009015b6127108211156120d957612710820491506004015b81156120ed57600a820491506001016120d9565b6120f781876133ce565b95506121198b8a612113878761210e87600a6134d5565b6126b1565b89612796565b9097509550505050505b5094509492505050565b5f805f61213a8585611f08565b915091508015801561214a575081155b15611ca7576040517f8eba4d0700000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016107c8565b5f805f8512156121d1576040517f4a7d166b00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016107c8565b845f036121e357505f905060016114d5565b8460ff841685018581121561222e576040517fd556b11100000000000000000000000000000000000000000000000000000000815260048101889052602481018790526044016107c8565b5f805f831215612298577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb383121561226f575f8095509550505050506114d5565b825f03600a0a915081848161228657612286613052565b04955050840290911491506114d59050565b5f83131561236357604d8313156122ee576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff881660448201526064016107c8565b82600a0a9150815f198161230457612304613052565b04841115612351576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff881660448201526064016107c8565b50919091029250600191506114d59050565b83600195509550505050506114d5565b5f61237e84846117e6565b91909155505050565b7fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc201545f907fe5444a702a2f437387f4eb075af275e349f1dba9a68923d27352f035d01dc200906001600160a01b0316806123e357339250505090565b6001909101805473ffffffffffffffffffffffffffffffffffffffff19169055919050565b805182517f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500911461247257825182516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016107c8565b335f5b845181101561258d576020818102868101820151908601909101516001600160a01b0389161561253f575f828152602086815260408083206001600160a01b038d16845290915290205481811015612519576040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038b1660048201526024810182905260448101839052606481018490526084016107c8565b5f838152602087815260408083206001600160a01b038e16845290915290209082900390555b6001600160a01b03881615612583575f828152602086815260408083206001600160a01b038c1684529091528120805483929061257d908490613137565b90915550505b5050600101612475565b50835160010361260d5760208401515f906020850151909150866001600160a01b0316886001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516125fe929190918252602082015260400190565b60405180910390a45050610941565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161265c9291906134e0565b60405180910390a4505050505050565b5f8082121561269157600160ff1b820361268b5750600160ff1b919050565b505f0390565b5090565b5f805f1983850993909202808410938190039390930393915050565b5f805f6126be8686612695565b91509150815f036126e2578381816126d8576126d8613052565b0492505050610ad4565b83821061272c576040517f6c59da120000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016107c8565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215612844577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115612831576127f57f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001613137565b84036128095750600160ff1b90508161287d565b612814600a8561314a565b61281d90613504565b6128288460016133ce565b9150915061287d565b61283a84613504565b839150915061287d565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8411156128775761281d600a8561314a565b50829050815b94509492505050565b6001600160a01b0381168114610b3f575f80fd5b5f80604083850312156128ab575f80fd5b82356128b681612886565b946020939093013593505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610b3f575f80fd5b5f60208284031215612901575f80fd5b8135610ad4816128c4565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156129495761294961290c565b604052919050565b5f67ffffffffffffffff82111561296a5761296a61290c565b50601f01601f191660200190565b5f82601f830112612987575f80fd5b813561299a61299582612951565b612920565b8181528460208386010111156129ae575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f8060c087890312156129df575f80fd5b86356129ea81612886565b955060208701356129fa81612886565b94506040870135612a0a81612886565b9350606087013592506080870135915060a087013567ffffffffffffffff811115612a33575f80fd5b612a3f89828a01612978565b9150509295509295509295565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6102d86020830184612a4c565b5f60208284031215612a9c575f80fd5b5035919050565b5f8060408385031215612ab4575f80fd5b82359150602083013567ffffffffffffffff811115612ad1575f80fd5b612add85828601612978565b9150509250929050565b5f67ffffffffffffffff821115612b0057612b0061290c565b5060051b60200190565b5f82601f830112612b19575f80fd5b81356020612b2961299583612ae7565b8083825260208201915060208460051b870101935086841115612b4a575f80fd5b602086015b84811015612b665780358352918301918301612b4f565b509695505050505050565b5f805f805f60a08688031215612b85575f80fd5b8535612b9081612886565b94506020860135612ba081612886565b9350604086013567ffffffffffffffff80821115612bbc575f80fd5b612bc889838a01612b0a565b94506060880135915080821115612bdd575f80fd5b612be989838a01612b0a565b93506080880135915080821115612bfe575f80fd5b50612c0b88828901612978565b9150509295509295909350565b5f60208284031215612c28575f80fd5b813567ffffffffffffffff811115612c3e575f80fd5b612c4a84828501612978565b949350505050565b5f8060408385031215612c63575f80fd5b823567ffffffffffffffff80821115612c7a575f80fd5b818501915085601f830112612c8d575f80fd5b81356020612c9d61299583612ae7565b82815260059290921b84018101918181019089841115612cbb575f80fd5b948201945b83861015612ce2578535612cd381612886565b82529482019490820190612cc0565b96505086013592505080821115612cf7575f80fd5b50612add85828601612b0a565b5f815180845260208085019450602084015f5b83811015612d3357815187529582019590820190600101612d17565b509495945050505050565b602081525f6102d86020830184612d04565b5f805f805f60a08688031215612d64575f80fd5b8535612d6f81612886565b94506020860135612d7f81612886565b93506040860135925060608601359150608086013567ffffffffffffffff811115612da8575f80fd5b612c0b88828901612978565b5f8060408385031215612dc5575f80fd5b8235612dd081612886565b915060208301358015158114612de4575f80fd5b809150509250929050565b5f8060408385031215612e00575f80fd5b8235612e0b81612886565b91506020830135612de481612886565b5f81518060208401855e5f93019283525090919050565b5f612c4a612e408386612e1b565b84612e1b565b7f7b22646563696d616c73223a000000000000000000000000000000000000000081525f612e77600c830187612e1b565b7f2c226465736372697074696f6e223a2231206f6620746865736520726563656981527f7074732063616e206265206275726e656420616c6f6e677369646520312000006020820152612ecd603e820187612e1b565b90507f20746f2072656465656d200000000000000000000000000000000000000000008152612eff600b820186612e1b565b90507f2066726f6d20746865207661756c742e222c000000000000000000000000000081527f226e616d65223a220000000000000000000000000000000000000000000000006012820152612f57601a820185612e1b565b7f227d0000000000000000000000000000000000000000000000000000000000008152600201979650505050505050565b5f60208284031215612f98575f80fd5b8151610ad481612886565b634e487b7160e01b5f52603260045260245ffd5b5f612fc461299584612951565b9050828152838383011115612fd7575f80fd5b8282602083015e5f602084830101529392505050565b5f60208284031215612ffd575f80fd5b815167ffffffffffffffff811115613013575f80fd5b8201601f81018413613023575f80fd5b612c4a84825160208401612fb7565b5f60208284031215613042575f80fd5b815160ff81168114610ad4575f80fd5b634e487b7160e01b5f52601260045260245ffd5b6001600160a01b0384168152826020820152606060408201525f61308d6060830184612a4c565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156102db576102db613096565b8381526020810183905260608101600383106130e757634e487b7160e01b5f52602160045260245ffd5b826040830152949350505050565b5f805f60608486031215613107575f80fd5b8351925060208401519150604084015167ffffffffffffffff8116811461312c575f80fd5b809150509250925092565b808201808211156102db576102db613096565b5f8261316457634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176102db576102db613096565b5f60208284031215613190575f80fd5b5051919050565b5f6001600160a01b03808816835280871660208401525060a060408301526131c260a0830186612d04565b82810360608401526131d48186612d04565b905082810360808401526131e88185612a4c565b98975050505050505050565b5f60208284031215613204575f80fd5b8151610ad4816128c4565b5f6001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261324660a0830184612a4c565b979650505050505050565b600181811c9082168061326557607f821691505b60208210810361328357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610ee557805f5260205f20601f840160051c810160208510156132ae5750805b601f840160051c820191505b818110156105a7575f81556001016132ba565b815167ffffffffffffffff8111156132e7576132e761290c565b6132fb816132f58454613251565b84613289565b602080601f83116001811461332e575f84156133175750858301515b5f19600386901b1c1916600185901b178555610941565b5f85815260208120601f198616915b8281101561335c5788860151825594840194600190910190840161333d565b508582101561337957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6001600160a01b038088168352808716602084015280861660408401525060a060608301526133bc60a0830185612d04565b82810360808401526131e88185612d04565b8082018281125f8312801582168215821617156133ed576133ed613096565b505092915050565b600181815b8085111561342f57815f190482111561341557613415613096565b8085161561342257918102915b93841c93908002906133fa565b509250929050565b5f82613445575060016102db565b8161345157505f6102db565b816001811461346757600281146134715761348d565b60019150506102db565b60ff84111561348257613482613096565b50506001821b6102db565b5060208310610133831016604e8410600b84101617156134b0575081810a6102db565b6134ba83836133f5565b805f19048211156134cd576134cd613096565b029392505050565b5f6102d88383613437565b604081525f6134f26040830185612d04565b828103602084015261308d8185612d04565b5f600160ff1b820361268b5761268b61309656"; diff --git a/src/generated/candidate/StoxReceiptVault.pointers.sol b/src/generated/candidate/StoxReceiptVault.pointers.sol index 95c52050..429e3ab4 100644 --- a/src/generated/candidate/StoxReceiptVault.pointers.sol +++ b/src/generated/candidate/StoxReceiptVault.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x22aa77aa9ffec4d290a8cacbcd8444b85761b6a1fb77c3f1b1a73490a7d9f972); +bytes32 constant BYTECODE_HASH = bytes32(0x81f5b328841117c2b0a4759cc87e76cf2abab03b4a461d9082c1c147cd8705a6); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0xD7f91c1C6e6e651Ec3F1Fd707aF7CbB7526206e1); +address constant DEPLOYED_ADDRESS = address(0x52174538a83b18462c5cF898016539B086c920C7); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"608060405234801561000f575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005561003c610041565b6100f3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100915760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100f05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b615ffa806101005f395ff3fe608060405260043610610337575f3560e01c8063715018a6116101af578063bbec4d06116100eb578063dd62ed3e11610094578063e70689f51161006e578063e70689f5146109ab578063f2fde38b146109ca578063f5647943146109e9578063f5d214f514610a1e5761033e565b8063dd62ed3e146108ed578063e1e6b89814610950578063e5be7d901461098c5761033e565b8063c77b66c2116100c5578063c77b66c2146108b3578063d09edf31146108c6578063db2088f4146108da5761033e565b8063bbec4d0614610875578063c54cafee14610894578063c63d75b6146105635761033e565b80638da5cb5b11610158578063a9059cbb11610132578063a9059cbb146107b8578063ac9650d8146107d7578063ae57de0c14610803578063ae98b39f146108225761033e565b80638da5cb5b14610771578063921a4c421461078557806395d89b41146107a45761033e565b80637a7af70d116101895780637a7af70d1461072057806381c3fcb91461073357806385b68756146107525761033e565b8063715018a6146106ce578063770afee1146106e2578063786cd916146107015761033e565b8063276b11401161027e5780634abe413711610227578063633ac71711610201578063633ac7171461061e5780636ba235211461063d5780636c876b941461069057806370a08231146106af5761033e565b80634abe4137146105c157806356db02e8146105e057806359f89dda146105ff5761033e565b8063402d267d11610258578063402d267d14610563578063439fab9114610583578063488bd7b0146105a25761033e565b8063276b1140146104fe578063313ce5671461051157806338d52e0f146105375761033e565b806318160ddd116102e05780631f6759d3116102ba5780631f6759d31461048d57806323b872dd146104c05780632755c6c7146104df5761033e565b806318160ddd1461043b578063181e7b3b1461044f5780631e4344a11461046e5761033e565b806306fdde031161031157806306fdde03146103e8578063095ea7b3146104095780631423feba146104285761033e565b806301e1d1141461037357806301ffc9a71461039a578063058a628f146103c95761033e565b3661033e57005b73b7e24412126ad6a2ce19cbd79fd11b68e7f30cf6365f80375f80365f845af43d5f803e80801561036d573d5ff35b3d5ffd5b005b34801561037e575f80fd5b50610387610a51565b6040519081526020015b60405180910390f35b3480156103a5575f80fd5b506103b96103b4366004614f0e565b610a5f565b6040519015158152602001610391565b3480156103d4575f80fd5b506103716103e3366004614f61565b610aba565b3480156103f3575f80fd5b506103fc610ce3565b6040516103919190614faa565b348015610414575f80fd5b506103b9610423366004614fbc565b610db6565b610387610436366004615109565b610dcd565b348015610446575f80fd5b50610387610e17565b34801561045a575f80fd5b50610387610469366004615168565b610e20565b348015610479575f80fd5b50610371610488366004615188565b610e3f565b348015610498575f80fd5b507f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70054610387565b3480156104cb575f80fd5b506103b96104da36600461519f565b610ecb565b3480156104ea575f80fd5b506103716104f9366004614fbc565b610eee565b61038761050c366004615168565b611028565b34801561051c575f80fd5b50610525611053565b60405160ff9091168152602001610391565b348015610542575f80fd5b5061054b6110f8565b6040516001600160a01b039091168152602001610391565b34801561056e575f80fd5b5061038761057d366004614f61565b505f1990565b34801561058e575f80fd5b5061038761059d3660046151dd565b61112c565b3480156105ad575f80fd5b506103876105bc366004615168565b6113d1565b3480156105cc575f80fd5b506103876105db366004614fbc565b6113e9565b3480156105eb575f80fd5b506103876105fa36600461520f565b6114a3565b34801561060a575f80fd5b50610371610619366004615256565b6117e4565b348015610629575f80fd5b50610371610638366004614f61565b61181c565b348015610648575f80fd5b50610387610657366004614f61565b6001600160a01b03165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be701602052604090205490565b34801561069b575f80fd5b506103716106aa366004614f61565b611949565b3480156106ba575f80fd5b506103876106c9366004614f61565b611a49565b3480156106d9575f80fd5b50610371611a92565b3480156106ed575f80fd5b506103876106fc366004615256565b611aa5565b34801561070c575f80fd5b5061037161071b366004614fbc565b611c5f565b61038761072e366004615168565b611d90565b34801561073e575f80fd5b5061037161074d3660046151dd565b611da5565b34801561075d575f80fd5b5061038761076c366004614fbc565b611de1565b34801561077c575f80fd5b5061054b611ec4565b348015610790575f80fd5b5061038761079f3660046152ab565b611ecd565b3480156107af575f80fd5b506103fc611efa565b3480156107c3575f80fd5b506103b96107d2366004614fbc565b611f4b565b3480156107e2575f80fd5b506107f66107f136600461531c565b611f58565b604051610391919061538b565b34801561080e575f80fd5b5061038761081d3660046152ab565b61203e565b34801561082d575f80fd5b5061038761083c366004614f61565b6001600160a01b03165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be702602052604090205490565b348015610880575f80fd5b5061038761088f366004615168565b612061565b34801561089f575f80fd5b506103876108ae366004615449565b61206f565b6103876108c1366004615109565b612157565b3480156108d1575f80fd5b5061054b612186565b6103876108e8366004615168565b6121ae565b3480156108f8575f80fd5b506103876109073660046154ae565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b34801561095b575f80fd5b507f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b031661054b565b348015610997575f80fd5b506103716109a6366004615557565b6121c2565b3480156109b6575f80fd5b506103716109c53660046155ed565b6122f9565b3480156109d5575f80fd5b506103716109e4366004614f61565b612462565b3480156109f4575f80fd5b507fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd025442116103b9565b348015610a29575f80fd5b507fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0154610387565b5f610a5a610e17565b905090565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f59f89dda000000000000000000000000000000000000000000000000000000001480610ab45750610ab4826124b8565b92915050565b6040517f248a9ca30000000000000000000000000000000000000000000000000000000081527ffc0b9a47b723baf66339577301d13949cab2da29c3baeaa9cfc1f36c513e8f8960048201525f906001600160a01b0383169063248a9ca390602401602060405180830381865afa158015610b37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b5b9190615645565b905080610bca576040517f76728ed90000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201527ffc0b9a47b723baf66339577301d13949cab2da29c3baeaa9cfc1f36c513e8f8960248201526044015b60405180910390fd5b6040517f248a9ca30000000000000000000000000000000000000000000000000000000081527f921a3c774c4abecc1bddc4f7beb397fdb2cde7806021d9571086abb74cd023e760048201525f906001600160a01b0384169063248a9ca390602401602060405180830381865afa158015610c47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c6b9190615645565b905080610cd5576040517f76728ed90000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527f921a3c774c4abecc1bddc4f7beb397fdb2cde7806021d9571086abb74cd023e76024820152604401610bc1565b610cde836125e6565b505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091610d349061565c565b80601f0160208091040260200160405190810160405280929190818152602001828054610d609061565c565b8015610dab5780601f10610d8257610100808354040283529160200191610dab565b820191905f5260205f20905b815481529060010190602001808311610d8e57829003601f168201915b505050505091505090565b5f33610dc38185856125f7565b5060019392505050565b5f80610dd7612604565b90505f610df187610deb335b89865f61265b565b8761266f565b9050610e008787838588612685565b610e0b335b476128ac565b9150505b949350505050565b5f610a5a612955565b5f610e3883670de0b6b3a7640000612ab4565b612ab4565b9392505050565b610e47612ac0565b7f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be7008054821115610e75578181555b7fff9fd4facd8bd30d905cc7ffbd03e8829a414df4c6554d155d132c3377868a42610e9e611ec4565b8254604080516001600160a01b039093168352602083018690528201526060015b60405180910390a15050565b5f33610ed8858285612b0b565b610ee3858585612bbf565b506001949350505050565b610ef6612ac0565b805f03610f3a576040517f5a6084530000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610bc1565b6001600160a01b0382165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70260205260409020547f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70090821115610fb7576001600160a01b0383165f90815260028201602052604090208290555b7fa1e5b368dc99c8558f28b1e7e8cb7ab542c989a4b697628ba7bfffe0aeaccffd610fe0611ec4565b6001600160a01b038581165f818152600286016020908152604091829020548251959094168552840191909152820185905260608201526080015b60405180910390a1505050565b5f8061104884611042335b3361103c612604565b5f61265b565b85612c4e565b9050610e3833610e05565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f308970152310243260080545f91906001600160a01b0316803b806110905760126110f0565b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f091906156a7565b935050505090565b5f807f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f30897015231024326005b546001600160a01b031692915050565b5f80611136612c65565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156111625750825b90505f8267ffffffffffffffff16600114801561117e5750303b155b90508115801561118c575080155b156111c3576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156112245784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61122c612c8d565b5f878060200190518101906112419190615714565b90506112508160200151612cc6565b6020810151516001600160a01b031615611296576040517f8951799200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516001600160a01b03166112d7576040517fd264eed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112e030612e39565b80516112eb90612f99565b7ffa89761502e992c8c755fba778ced00f4562485023f656906eb76f5dd65a9fe53360408051808201825284516001600160a01b0316815260208086015190820152905161133a92919061580b565b60405180910390a17fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc396505083156113c75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050919050565b5f610e38836113e4335b3386600161265b565b613021565b5f61141b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b031690565b6040517efdd58e0000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260248201859052919091169062fdd58e90604401602060405180830381865afa15801561147f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e389190615645565b5f6114ac61302e565b825f036114e5576040517f312497b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6115a98461151b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b031690565b6040517efdd58e0000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152602482018a9052919091169062fdd58e90604401602060405180830381865afa15801561157f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115a39190615645565b9061305c565b905080156116c6577f88e2280ece62e9296d3578b77647db2c11f9fa7e42578e2db5d4262123ffae3e3387878785886040516115ea969594939291906158af565b60405180910390a17f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b03166001600160a01b031663043fa98733883360405160e085901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03938416600482015291831660248301529091166044820152606481018890526084810184905260c060a48201525f60c482015260e4015f604051808303815f87803b1580156116af575f80fd5b505af11580156116c1573d5f803e3d5ffd5b505050505b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f3dd35eca0ca8a128757fa464a5dfa4ad6cc4853cad96dce4e90fdbea4f0a52e36040518060a001604052808c6001600160a01b031681526020018b81526020018a81526020018781526020018981525060405160200161175d91906158f8565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161178a93929190615943565b5f604051808303815f87803b1580156117a1575f80fd5b505af11580156117b3573d5f803e3d5ffd5b5093945050505050610e0f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b8282826040517f3ae4063b000000000000000000000000000000000000000000000000000000008152600401610bc193929190615943565b611824612ac0565b6001600160a01b0381165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70260205260409020547f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be7009042116118d9576001600160a01b0382165f818152600283016020526040908190205490517f81a7897700000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610bc1565b6001600160a01b0382165f9081526002820160205260408120557fa1e5b368dc99c8558f28b1e7e8cb7ab542c989a4b697628ba7bfffe0aeaccffd61191c611ec4565b604080516001600160a01b03928316815291851660208301525f9082018190526060820152608001610ebf565b611951612ac0565b6001600160a01b0381165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70160205260409020547f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be700904211611a06576001600160a01b0382165f818152600183016020526040908190205490517ff1b01b5400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610bc1565b6001600160a01b0382165f9081526001820160205260408120557fd08871fffa9d03c01fcba597af5dfbe64cb26f207debdae1af2532695447499161191c611ec4565b5f80611a548361306b565b90505f611a5f61307e565b6001600160a01b0385165f90815260038201602052604081205491925090611a889084906130df565b5095945050505050565b611a9a612ac0565b611aa35f612f99565b565b5f611aae61302e565b825f03611ae7576040517f312497b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611af5846115a387611a49565b90508015611b47577f3fc1c49e72362e91416388fe7a107b92db924642476e83e701eeeb6256d7249e3386868487604051611b3495949392919061596a565b60405180910390a1611b47853383612bbf565b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f54f0af3716c79b30b8c228679d31d77a1a5f526c16af3262730e0a8de4363fed60405180608001604052808b6001600160a01b031681526020018a815260200187815260200189815250604051602001611bd891906159a1565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401611c0593929190615943565b5f604051808303815f87803b158015611c1c575f80fd5b505af1158015611c2e573d5f803e3d5ffd5b5093945050505050610e3860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611c67612ac0565b805f03611cab576040517ffd86061b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610bc1565b6001600160a01b0382165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70160205260409020547f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70090821115611d28576001600160a01b0383165f90815260018201602052604090208290555b7fd08871fffa9d03c01fcba597af5dfbe64cb26f207debdae1af25326954474991611d51611ec4565b6001600160a01b038581165f8181526001860160209081526040918290205482519590941685528401919091528201859052606082015260800161101b565b5f8061104884611d9f33611033565b8561266f565b7fdaffad82f53a38a62340f14cdd6fd3b437c5dcda6b32029dac1e661dbce28b2d3382604051611dd69291906159e2565b60405180910390a150565b5f80611df0848585600161265b565b9050805f03611e02575f915050610ab4565b610e0f611e367f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b031690565b6040517efdd58e0000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015260248201879052919091169062fdd58e90604401602060405180830381865afa158015611e9a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ebe9190615645565b82612ab4565b5f610a5a61318d565b5f80611ee087610e33878988600161265b565b9050611ef08187878a88886131b5565b9695505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091610d349061565c565b5f33610dc3818585612bbf565b604080515f8152602081019091526060908267ffffffffffffffff811115611f8257611f82614fe6565b604051908082528060200260200182016040528015611fb557816020015b6060815260200190600190039081611fa05790505b5091505f5b838110156120365761201130868684818110611fd857611fd8615a43565b9050602002810190611fea9190615a70565b85604051602001611ffd93929190615ad1565b60405160208183030381529060405261357b565b83828151811061202357612023615a43565b6020908102919091010152600101611fba565b505092915050565b5f80612051876113e4878988600161265b565b9050611ef08787878488886131b5565b5f610e3883610e33336113db565b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd01545f907fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd00908511156120f1576040517fe4a4718200000000000000000000000000000000000000000000000000000000815260048101869052602401610bc1565b5f61210888612102338a8a5f61265b565b5f61266f565b905061214c8888838989898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061268592505050565b979650505050505050565b5f80612161612604565b90505f6121778761217133610de3565b87612c4e565b9050610e008187898588612685565b5f807fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0061111c565b5f8061104884670de0b6b3a7640000612102565b6121cf8585858585613616565b6121d98484613679565b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080546040805160a0810182526001600160a01b0388811682528781166020830152918101869052606081018590529116906359f89dda9088907f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a4890608081016122837fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0254421190565b151590526040516122979190602001615b2e565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016122c493929190615943565b5f604051808303815f87803b1580156122db575f80fd5b505af11580156122ed573d5f803e3d5ffd5b50505050505050505050565b835f03612332576040517f8672985d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0090505f6040518060a001604052808360020154815260200183600201548152602001878152602001861515815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250905084806123cc5750816002015486115b156123e05760028201869055602081018690525b7f7ef5cae78e9bd364afb19bb0f8a881a6d156e35a119e28c0d17524e5079581583387878787604051612417959493929190615ba0565b60405180910390a181546001600160a01b03166359f89dda337f50a07cb25d0d864370863300b20987dfdae089abad71b607faf639d09d053391846040516020016122979190615bee565b61246a612ac0565b6001600160a01b0381166124ac576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc1565b6124b581612f99565b50565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fe5be7d9000000000000000000000000000000000000000000000000000000000148061254a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f439fab9100000000000000000000000000000000000000000000000000000000145b8061259657507fffffffff0000000000000000000000000000000000000000000000000000000082167fe1e6b89800000000000000000000000000000000000000000000000000000000145b80610ab457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610ab4565b6125ee612ac0565b6124b581612e39565b610cde8383836001613739565b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd01545f907fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0090612655906001615c32565b91505090565b5f670de0b6b3a76400005b95945050505050565b5f61267a8284613861565b610e0f84845f6138a5565b61268d61302e565b845f036126c6576040517fc7838b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f036126ff576040517ffc8c806300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841661273f576040517f6ba9ecd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f0361277a576040517fe4a471820000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc1565b7f3377bcbed49a0c0005e53931cd8fe7334b5371523e5de784c0d0d3d01089cfea3385878686866040516127b3969594939291906158af565b60405180910390a16127c885858585856138ba565b6127d28484613915565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546040517f6d5b3f780000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690636d5b3f7890612842903390889087908990889060040161596a565b5f604051808303815f87803b158015612859575f80fd5b505af115801561286b573d5f803e3d5ffd5b5050505061287c8585858585613962565b6128a560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b804710156128ef576040517fcf47918100000000000000000000000000000000000000000000000000000000815247600482015260248101829052604401610bc1565b612908828260405180602001604052805f815250613a0e565b15612911575050565b3d156129235761291f613a23565b5050565b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8061295f61307e565b60028101549091505f0361297557612655613a2e565b5f6129845f1960036001613a93565b90505f5b5f198214610e38575f8360020183815481106129a6576129a6615a43565b905f5260205f2090600502015f0154905060028103612a83575f612a738560020185815481106129d8576129d8615a43565b905f5260205f20906005020160040180546129f29061565c565b80601f0160208091040260200160405190810160405280929190818152602001828054612a1e9061565c565b8015612a695780601f10612a4057610100808354040283529160200191612a69565b820191905f5260205f20905b815481529060010190602001808311612a4c57829003601f168201915b5050505050613b8e565b9050612a7f8382613ba3565b9250505b5f838152600485016020526040902054612a9d9083615c32565b9150612aac8360036001613a93565b925050612988565b5f610e38838383613c27565b33612ac9611ec4565b6001600160a01b031614611aa3576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610bc1565b6001600160a01b038381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160209081526040808320938616835292905220545f19811015612bb95781811015612bab576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401610bc1565b612bb984848484035f613739565b50505050565b6001600160a01b038316612c01576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc1565b6001600160a01b038216612c43576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc1565b610cde838383613c3c565b5f612c598284613861565b610e0f84846001613c27565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610ab4565b425f03611aa3576040517f789a532d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cce613c8f565b612ce081602001518260400151613c97565b80517f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f308970152310243260080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b0393841617825560608401517f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601805490921693169283179055604080517f481c6a75000000000000000000000000000000000000000000000000000000008152905191925f92909163481c6a759160048083019260209291908290030181865afa158015612dc0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612de49190615c45565b90506001600160a01b0381163014610cde576040517f7935475e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0382166024820152604401610bc1565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f59f89dda0000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015612eb4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed89190615c60565b612f0e576040517ffd12061600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03831690811782556040805133815260208101929092527fa8c713fe8fb360697fc0daab836d85208a605d485fbc265aea0f773fc6cdd71a9101610ebf565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f610e38838360016138a5565b613036613ca9565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f828218828410028218610e38565b5f8061307683613d04565b549392505050565b5f8060ff196130ae60017f2f8f8ecf1b7a1a3ceda8d15a9a2247a2377b3434535a87f1728021c13fec2e71615a30565b6040516020016130c091815260200190565b60408051601f1981840301815291905280516020909101201692915050565b5f8082816130eb61307e565b9050855f6130fc8760036001613a93565b90505b5f19811461317e57925082811580159061313c5750600283600201828154811061312b5761312b615a43565b905f5260205f2090600502015f0154145b1561316a575f61315a8460020183815481106129d8576129d8615a43565b90506131668382613ba3565b9250505b6131778160036001613a93565b90506130ff565b509350909150505b9250929050565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930061111c565b6131bd61302e565b855f036131f6576040517fc7838b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f0361322f576040517ffc8c806300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661326f576040517f6ba9ecd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166132af576040517f9905827b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f036132eb576040517fe4a4718200000000000000000000000000000000000000000000000000000000815260048101839052602401610bc1565b7f2845b9458bcc357e1abfe8de7f6832dfe7220596a053496b33d0deb6577d8d2a338686898787876040516133269796959493929190615c7b565b60405180910390a16001600160a01b038416331461349557613349843385612b0b565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b03166001600160a01b031663e985e9c585336040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156133e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134099190615c60565b613495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201527f6572206f7220617070726f7665640000000000000000000000000000000000006064820152608401610bc1565b61349f8484613d71565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546040517fc2530e390000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c2530e399061350f903390889087908990889060040161596a565b5f604051808303815f87803b158015613526575f80fd5b505af1158015613538573d5f803e3d5ffd5b5050505061354a868686868686613dbe565b61357360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60605f6135888484613ec7565b90508080156135a957505f3d11806135a957505f846001600160a01b03163b115b156135be576135b6613eda565b915050610ab4565b8015613601576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610bc1565b3d156129235761360f613a23565b5092915050565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b031633146128a5576040517f8813aac300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be700805442118015906136c257506001600160a01b0383165f908152600182016020526040902054155b80156136e557506001600160a01b0382165f908152600282016020526040902054155b15610cde5780546040517f79d7155100000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03808516602483015283166044820152606401610bc1565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b03851661379c576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc1565b6001600160a01b0384166137de576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc1565b6001600160a01b038086165f908152600183016020908152604080832093881683529290522083905581156128a557836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161385291815260200190565b60405180910390a35050505050565b8181101561291f576040517fa3e322340000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610bc1565b5f610e0f8484670de0b6b3a764000085613ef3565b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd01547fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd00906139089084613f35565b6001909101555050505050565b6001600160a01b038216613957576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc1565b61291f5f8383613c3c565b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8216040518060c001604052806139cb3390565b6001600160a01b031681526020018a6001600160a01b031681526020018881526020018b8152602001898152602001878152506040516020016122979190615d20565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b5f8060ff19613a5e60017fb750591399365444a618527b69a54ce09476c8bde1ecff60f5aa1fe2b52605ff615a30565b604051602001613a7091815260200190565b60408051808303601f190181529190528051602090910120166002015492915050565b5f600783168103613ad0576040517fbf3cad0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613ad961307e565b60028101549091505f03613af1575f19915050610e38565b5f5f198614613b2457816002018681548110613b0f57613b0f615a43565b905f5260205f20906005020160030154613b27565b81545b90506002846002811115613b3d57613b3d615d32565b03613b5f57613b5682613b508484613f44565b87613fbf565b92505050610e38565b6001846002811115613b7357613b73615d32565b03613b8357613b56828287614017565b611ef0828287613fbf565b5f81806020019051810190610ab49190615645565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115613c01576040517fbf463fe900000000000000000000000000000000000000000000000000000000815260048101849052602401610bc1565b5f613c1e613c18613c12865f614084565b856140de565b5f614140565b50949350505050565b5f610e0f84670de0b6b3a76400008585613ef3565b613c44614181565b613c4d836141e7565b613c56826141e7565b613c618383836142d4565b6001600160a01b038316613c7857610cde81614434565b6001600160a01b038216610cde57610cde81614477565b611aa36144b1565b613c9f6144b1565b61291f82826144ef565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203611aa3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8060ff19613d3460017fb750591399365444a618527b69a54ce09476c8bde1ecff60f5aa1fe2b52605ff615a30565b604051602001613d4691815260200190565b60408051601f1981840301815291815281516020928301205f96875292909216905290922092915050565b6001600160a01b038216613db3576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc1565b61291f825f83613c3c565b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e9828696040518060c001604052808a6001600160a01b031681526020018b6001600160a01b031681526020018881526020018c815260200189815260200187815250604051602001613e649190615d20565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401613e9193929190615943565b5f604051808303815f87803b158015613ea8575f80fd5b505af1158015613eba573d5f803e3d5ffd5b5050505050505050505050565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b5f613f20613f0083614552565b8015613f1b57505f8480613f1657613f16615d5f565b868809115b151590565b613f2b86868661457e565b6126669190615c32565b5f828218828411028218610e38565b5f5b5f198214158015613f88575042836002018381548110613f6857613f68615a43565b5f91825260209091206001600590920201015467ffffffffffffffff1611155b15613fb957826002018281548110613fa257613fa2615a43565b905f5260205f209060050201600301549150613f46565b50919050565b5f5b5f19831461400d575f846002018481548110613fdf57613fdf615a43565b905f5260205f209060050201905082815f0154165f146140025783915050610e38565b600301549250613fc1565b505f199392505050565b5f5b5f19831461400d575f84600201848154811061403757614037615a43565b5f918252602090912060059091020160018101549091504267ffffffffffffffff9091161115614067575061400d565b80548316156140795783915050610e38565b600301549250614019565b5f805f614091858561462e565b91509150806140d6576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610bc1565b509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061412386868686614734565b915091505f6141328383614853565b9a9950505050505050505050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6141748282876148b1565b9350935050509250929050565b5f61418a61307e565b60028101549091505f0361419b5750565b5f6141b0826005015460026001176001613a93565b90505f195b5f1982146141d35750806141cc8160036001613a93565b91506141b5565b5f198114610cde5760058301819055505050565b6001600160a01b0381166141f85750565b5f61420161307e565b6001600160a01b0383165f9081526003820160205260408120549192506142278461306b565b90505f8061423583856130df565b9150915083810361424857505050505050565b6001600160a01b0386165f9081526003860160205260409020819055818314614275576142758683614a9c565b6040805185815260208101839052908101849052606081018390526001600160a01b038716907f36a2eb39b73568d38e98721588b15b309c9380e1b1ab575c2c3d71d5148ccb4a9060800160405180910390a261357384848385614aae565b6142de8383613679565b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a6040518060800160405280896001600160a01b03168152602001886001600160a01b0316815260200187815260200161438e7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0254421190565b151590526040805182516001600160a01b03908116602080840191909152840151168183015290820151606080830191909152909101511515608082015260a0016040516020818303038152906040526040518463ffffffff1660e01b81526004016143fc93929190615943565b5f604051808303815f87803b158015614413575f80fd5b505af1158015614425573d5f803e3d5ffd5b50505050612bb9848484614b0b565b5f61443d61307e565b60028101549091501561291f5760058101545f9081526004820160205260408120805484929061446e908490615c32565b90915550505050565b5f61448061307e565b60028101549091501561291f5760058101545f9081526004820160205260408120805484929061446e908490615a30565b6144b9614b16565b611aa3576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144f76144b1565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036145438482615dd0565b5060048101612bb98382615dd0565b5f600282600381111561456757614567615d32565b6145719190615e8c565b60ff166001149050919050565b5f805f61458b8686614b34565b91509150815f036145af578381816145a5576145a5615d5f565b0492505050610e38565b8184116145c6576145c66003851502601118614b50565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f601b83900b8314838382614692577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561467257620186a0860595506005850194505b8586601b0b1461468d57600a86059550846001019450614672565b6146a8565b855f036146a857505f9250600191506131869050565b848560030b14614704575f8512156146c857505f92508291506131869050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610bc1565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f808515841517801561474c575f92505f9150614849565b6147568487615ead565b91505f61476288614b61565b90505f61476e87614b61565b90505f61477b8383614b34565b5090505f6f0785ee10d5da46d900f436a0000000008211156147b0576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156147d157670de0b6b3a7640000820491506012015b633b9aca008211156147ea57633b9aca00820491506009015b6127108211156147ff57612710820491506004015b811561481357600a820491506001016147ff565b61481d8187615ead565b955061483f8b8a614839878761483487600a615fac565b614bc2565b89614c9d565b9097509550505050505b5094509492505050565b5f805f614860858561462e565b9150915080158015614870575081155b156140d6576040517f8eba4d070000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610bc1565b5f805f8512156148f7576040517f4a7d166b0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610bc1565b845f0361490957505f90506001614a94565b8460ff8416850185811215614954576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610bc1565b5f805f8312156149be577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215614995575f809550955050505050614a94565b825f03600a0a91508184816149ac576149ac615d5f565b0495505084029091149150614a949050565b5f831315614a8957604d831315614a14576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610bc1565b82600a0a9150815f1981614a2a57614a2a615d5f565b04841115614a77576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610bc1565b5091909102925060019150614a949050565b509193506001925050505b935093915050565b5f614aa683613d04565b919091555050565b5f614ab761307e565b905083816004015f8781526020019081526020015f205f828254614adb9190615a30565b90915550505f83815260048201602052604081208054849290614aff908490615c32565b90915550505050505050565b610cde838383614da9565b5f614b1f612c65565b5468010000000000000000900460ff16919050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f80821215614bbe577f80000000000000000000000000000000000000000000000000000000000000008203614bb857507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b5f805f614bcf8686614b34565b91509150815f03614be9578381816145a5576145a5615d5f565b838210614c33576040517f6c59da12000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610bc1565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614d67577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614d5457614cfc7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001615c32565b8403614d2c57507f8000000000000000000000000000000000000000000000000000000000000000905081614da0565b614d37600a85615fb7565b614d4090615fca565b614d4b846001615ead565b91509150614da0565b614d5d84615fca565b8391509150614da0565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614d9a57614d40600a85615fb7565b50829050815b94509492505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038416614df65781816002015f828254614deb9190615c32565b90915550614e7f9050565b6001600160a01b0384165f9081526020829052604090205482811015614e61576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810182905260448101849052606401610bc1565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316614e9d576002810180548390039055614ebb565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051614f0091815260200190565b60405180910390a350505050565b5f60208284031215614f1e575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e38575f80fd5b6001600160a01b03811681146124b5575f80fd5b5f60208284031215614f71575f80fd5b8135610e3881614f4d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610e386020830184614f7c565b5f8060408385031215614fcd575f80fd5b8235614fd881614f4d565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff8111828210171561503657615036614fe6565b60405290565b6040516080810167ffffffffffffffff8111828210171561503657615036614fe6565b604051601f8201601f1916810167ffffffffffffffff8111828210171561508857615088614fe6565b604052919050565b5f67ffffffffffffffff8211156150a9576150a9614fe6565b50601f01601f191660200190565b5f82601f8301126150c6575f80fd5b81356150d96150d482615090565b61505f565b8181528460208386010111156150ed575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f806080858703121561511c575f80fd5b84359350602085013561512e81614f4d565b925060408501359150606085013567ffffffffffffffff811115615150575f80fd5b61515c878288016150b7565b91505092959194509250565b5f8060408385031215615179575f80fd5b50508035926020909101359150565b5f60208284031215615198575f80fd5b5035919050565b5f805f606084860312156151b1575f80fd5b83356151bc81614f4d565b925060208401356151cc81614f4d565b929592945050506040919091013590565b5f602082840312156151ed575f80fd5b813567ffffffffffffffff811115615203575f80fd5b610e0f848285016150b7565b5f805f8060808587031215615222575f80fd5b843561522d81614f4d565b93506020850135925060408501359150606085013567ffffffffffffffff811115615150575f80fd5b5f805f60608486031215615268575f80fd5b833561527381614f4d565b925060208401359150604084013567ffffffffffffffff811115615295575f80fd5b6152a1868287016150b7565b9150509250925092565b5f805f805f60a086880312156152bf575f80fd5b8535945060208601356152d181614f4d565b935060408601356152e181614f4d565b925060608601359150608086013567ffffffffffffffff811115615303575f80fd5b61530f888289016150b7565b9150509295509295909350565b5f806020838503121561532d575f80fd5b823567ffffffffffffffff80821115615344575f80fd5b818501915085601f830112615357575f80fd5b813581811115615365575f80fd5b8660208260051b8501011115615379575f80fd5b60209290920196919550909350505050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b828110156153fe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526153ec858351614f7c565b945092850192908501906001016153b2565b5092979650505050505050565b5f8083601f84011261541b575f80fd5b50813567ffffffffffffffff811115615432575f80fd5b602083019150836020828501011115613186575f80fd5b5f805f805f6080868803121561545d575f80fd5b85359450602086013561546f81614f4d565b935060408601359250606086013567ffffffffffffffff811115615491575f80fd5b61549d8882890161540b565b969995985093965092949392505050565b5f80604083850312156154bf575f80fd5b82356154ca81614f4d565b915060208301356154da81614f4d565b809150509250929050565b5f82601f8301126154f4575f80fd5b8135602067ffffffffffffffff82111561551057615510614fe6565b8160051b61551f82820161505f565b9283528481018201928281019087851115615538575f80fd5b83870192505b8483101561214c5782358252918301919083019061553e565b5f805f805f60a0868803121561556b575f80fd5b853561557681614f4d565b9450602086013561558681614f4d565b9350604086013561559681614f4d565b9250606086013567ffffffffffffffff808211156155b2575f80fd5b6155be89838a016154e5565b935060808801359150808211156155d3575f80fd5b5061530f888289016154e5565b80151581146124b5575f80fd5b5f805f8060608587031215615600575f80fd5b843593506020850135615612816155e0565b9250604085013567ffffffffffffffff81111561562d575f80fd5b6156398782880161540b565b95989497509550505050565b5f60208284031215615655575f80fd5b5051919050565b600181811c9082168061567057607f821691505b602082108103613fb9577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f602082840312156156b7575f80fd5b815160ff81168114610e38575f80fd5b5f82601f8301126156d6575f80fd5b81516156e46150d482615090565b8181528460208386010111156156f8575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f60208284031215615724575f80fd5b815167ffffffffffffffff8082111561573b575f80fd5b908301906040828603121561574e575f80fd5b615756615013565b825161576181614f4d565b8152602083015182811115615774575f80fd5b929092019160808387031215615788575f80fd5b61579061503c565b835161579b81614f4d565b81526020840151838111156157ae575f80fd5b6157ba888287016156c7565b6020830152506040840151838111156157d1575f80fd5b6157dd888287016156c7565b604083015250606084015193506157f384614f4d565b60608101939093526020810192909252509392505050565b5f6001600160a01b038085168352604060208401528084511660408401526020840151604060608501528181511660808501526020810151608060a0860152615858610100860182614f7c565b905060408201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808683030160c08701526158938282614f7c565b9150508260608301511660e08601528093505050509392505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015283608083015260c060a08301526158ec60c0830184614f7c565b98975050505050505050565b602081526001600160a01b0382511660208201526020820151604082015260408201516060820152606082015160808201525f608083015160a080840152610e0f60c0840182614f7c565b6001600160a01b0384168152826020820152606060408201525f6126666060830184614f7c565b5f6001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261214c60a0830184614f7c565b602081526001600160a01b03825116602082015260208201516040820152604082015160608201525f6060830151608080840152610e0f60a0840182614f7c565b6001600160a01b0383168152604060208201525f610e0f6040830184614f7c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610ab457610ab4615a03565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615aa3575f80fd5b83018035915067ffffffffffffffff821115615abd575f80fd5b602001915036819003821315613186575f80fd5b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f815180845260208085019450602084015f5b83811015615b2357815187529582019590820190600101615b07565b509495945050505050565b602081525f6001600160a01b0380845116602084015280602085015116604084015250604083015160a06060840152615b6a60c0840182615af4565b90506060840151601f19848303016080850152615b878282615af4565b9150506080840151151560a08401528091505092915050565b6001600160a01b0386168152846020820152831515604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f19160101949350505050565b602081528151602082015260208201516040820152604082015160608201526060820151151560808201525f608083015160a080840152610e0f60c0840182614f7c565b80820180821115610ab457610ab4615a03565b5f60208284031215615c55575f80fd5b8151610e3881614f4d565b5f60208284031215615c70575f80fd5b8151610e38816155e0565b5f6001600160a01b03808a16835280891660208401528088166040840152508560608301528460808301528360a083015260e060c0830152615cc060e0830184614f7c565b9998505050505050505050565b5f6001600160a01b038083511684528060208401511660208501525060408201516040840152606082015160608401526080820151608084015260a082015160c060a0850152610e0f60c0850182614f7c565b602081525f610e386020830184615ccd565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b601f821115610cde57805f5260205f20601f840160051c81016020851015615db15750805b601f840160051c820191505b818110156128a5575f8155600101615dbd565b815167ffffffffffffffff811115615dea57615dea614fe6565b615dfe81615df8845461565c565b84615d8c565b602080601f831160018114615e31575f8415615e1a5750858301515b5f19600386901b1c1916600185901b178555613573565b5f85815260208120601f198616915b82811015615e5f57888601518255948401946001909101908401615e40565b5085821015615e7c57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60ff831680615e9e57615e9e615d5f565b8060ff84160691505092915050565b8082018281125f83128015821682158216171561203657612036615a03565b600181815b80851115615f0657815f1904821115615eec57615eec615a03565b80851615615ef957918102915b93841c9390800290615ed1565b509250929050565b5f82615f1c57506001610ab4565b81615f2857505f610ab4565b8160018114615f3e5760028114615f4857615f64565b6001915050610ab4565b60ff841115615f5957615f59615a03565b50506001821b610ab4565b5060208310610133831016604e8410600b8410161715615f87575081810a610ab4565b615f918383615ecc565b805f1904821115615fa457615fa4615a03565b029392505050565b5f610e388383615f0e565b5f82615fc557615fc5615d5f565b500490565b5f7f80000000000000000000000000000000000000000000000000000000000000008203614bb857614bb8615a0356"; + hex"608060405234801561000f575f80fd5b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005561003c610041565b6100f3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100915760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100f05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b615dfa806101005f395ff3fe608060405260043610610337575f3560e01c8063715018a6116101af578063bbec4d06116100eb578063dd62ed3e11610094578063e70689f51161006e578063e70689f51461098c578063f2fde38b146109ab578063f5647943146109ca578063f5d214f5146109ff5761033e565b8063dd62ed3e146108ce578063e1e6b89814610931578063e5be7d901461096d5761033e565b8063c77b66c2116100c5578063c77b66c214610894578063d09edf31146108a7578063db2088f4146108bb5761033e565b8063bbec4d0614610856578063c54cafee14610875578063c63d75b6146105445761033e565b80638da5cb5b11610158578063a9059cbb11610132578063a9059cbb14610799578063ac9650d8146107b8578063ae57de0c146107e4578063ae98b39f146108035761033e565b80638da5cb5b14610752578063921a4c421461076657806395d89b41146107855761033e565b80637a7af70d116101895780637a7af70d1461070157806381c3fcb91461071457806385b68756146107335761033e565b8063715018a6146106af578063770afee1146106c3578063786cd916146106e25761033e565b8063276b11401161027e5780634abe413711610227578063633ac71711610201578063633ac717146105ff5780636ba235211461061e5780636c876b941461067157806370a08231146106905761033e565b80634abe4137146105a257806356db02e8146105c157806359f89dda146105e05761033e565b8063402d267d11610258578063402d267d14610544578063439fab9114610564578063488bd7b0146105835761033e565b8063276b1140146104df578063313ce567146104f257806338d52e0f146105185761033e565b806318160ddd116102e05780631f6759d3116102ba5780631f6759d31461048d57806323b872dd146104a15780632755c6c7146104c05761033e565b806318160ddd1461043b578063181e7b3b1461044f5780631e4344a11461046e5761033e565b806306fdde031161031157806306fdde03146103e8578063095ea7b3146104095780631423feba146104285761033e565b806301e1d1141461037357806301ffc9a71461039a578063058a628f146103c95761033e565b3661033e57005b73ad6219d71ccf6904c0633e3a8a8c423f54036fd1365f80375f80365f845af43d5f803e80801561036d573d5ff35b3d5ffd5b005b34801561037e575f80fd5b50610387610a32565b6040519081526020015b60405180910390f35b3480156103a5575f80fd5b506103b96103b4366004614dd8565b610a40565b6040519015158152602001610391565b3480156103d4575f80fd5b506103716103e3366004614e13565b610a83565b3480156103f3575f80fd5b506103fc610cac565b6040516103919190614e5c565b348015610414575f80fd5b506103b9610423366004614e6e565b610d7f565b610387610436366004614fa2565b610d96565b348015610446575f80fd5b50610387610de0565b34801561045a575f80fd5b50610387610469366004615001565b610de9565b348015610479575f80fd5b50610371610488366004615021565b610e08565b348015610498575f80fd5b50610387610e94565b3480156104ac575f80fd5b506103b96104bb366004615038565b610ebf565b3480156104cb575f80fd5b506103716104da366004614e6e565b610ee2565b6103876104ed366004615001565b61101c565b3480156104fd575f80fd5b50610506611047565b60405160ff9091168152602001610391565b348015610523575f80fd5b5061052c6110ec565b6040516001600160a01b039091168152602001610391565b34801561054f575f80fd5b5061038761055e366004614e13565b505f1990565b34801561056f575f80fd5b5061038761057e366004615076565b611120565b34801561058e575f80fd5b5061038761059d366004615001565b611399565b3480156105ad575f80fd5b506103876105bc366004614e6e565b6113b1565b3480156105cc575f80fd5b506103876105db3660046150a8565b611452565b3480156105eb575f80fd5b506103716105fa3660046150ef565b611762565b34801561060a575f80fd5b50610371610619366004614e13565b61179a565b348015610629575f80fd5b50610387610638366004614e13565b6001600160a01b03165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be701602052604090205490565b34801561067c575f80fd5b5061037161068b366004614e13565b6118c7565b34801561069b575f80fd5b506103876106aa366004614e13565b6119c7565b3480156106ba575f80fd5b50610371611a10565b3480156106ce575f80fd5b506103876106dd3660046150ef565b611a23565b3480156106ed575f80fd5b506103716106fc366004614e6e565b611bdd565b61038761070f366004615001565b611d0e565b34801561071f575f80fd5b5061037161072e366004615076565b611d23565b34801561073e575f80fd5b5061038761074d366004614e6e565b611d5f565b34801561075d575f80fd5b5061052c611e29565b348015610771575f80fd5b50610387610780366004615144565b611e32565b348015610790575f80fd5b506103fc611e5f565b3480156107a4575f80fd5b506103b96107b3366004614e6e565b611eb0565b3480156107c3575f80fd5b506107d76107d23660046151b5565b611ebd565b6040516103919190615224565b3480156107ef575f80fd5b506103876107fe366004615144565b611fa3565b34801561080e575f80fd5b5061038761081d366004614e13565b6001600160a01b03165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be702602052604090205490565b348015610861575f80fd5b50610387610870366004615001565b611fc6565b348015610880575f80fd5b5061038761088f3660046152e2565b611fd4565b6103876108a2366004614fa2565b6120a3565b3480156108b2575f80fd5b5061052c6120d2565b6103876108c9366004615001565b6120fa565b3480156108d9575f80fd5b506103876108e8366004615347565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b34801561093c575f80fd5b507f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b031661052c565b348015610978575f80fd5b506103716109873660046153f0565b61210e565b348015610997575f80fd5b506103716109a6366004615486565b612245565b3480156109b6575f80fd5b506103716109c5366004614e13565b6123ae565b3480156109d5575f80fd5b507fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd025442116103b9565b348015610a0a575f80fd5b507fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0154610387565b5f610a3b610de0565b905090565b5f6001600160e01b031982167f59f89dda000000000000000000000000000000000000000000000000000000001480610a7d5750610a7d82612404565b92915050565b6040517f248a9ca30000000000000000000000000000000000000000000000000000000081527ffc0b9a47b723baf66339577301d13949cab2da29c3baeaa9cfc1f36c513e8f8960048201525f906001600160a01b0383169063248a9ca390602401602060405180830381865afa158015610b00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2491906154de565b905080610b93576040517f76728ed90000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201527ffc0b9a47b723baf66339577301d13949cab2da29c3baeaa9cfc1f36c513e8f8960248201526044015b60405180910390fd5b6040517f248a9ca30000000000000000000000000000000000000000000000000000000081527f921a3c774c4abecc1bddc4f7beb397fdb2cde7806021d9571086abb74cd023e760048201525f906001600160a01b0384169063248a9ca390602401602060405180830381865afa158015610c10573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3491906154de565b905080610c9e576040517f76728ed90000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527f921a3c774c4abecc1bddc4f7beb397fdb2cde7806021d9571086abb74cd023e76024820152604401610b8a565b610ca7836124d2565b505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091610cfd906154f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d29906154f5565b8015610d745780601f10610d4b57610100808354040283529160200191610d74565b820191905f5260205f20905b815481529060010190602001808311610d5757829003601f168201915b505050505091505090565b5f33610d8c8185856124e3565b5060019392505050565b5f80610da06124f0565b90505f610dba87610db4335b89865f612547565b8761255b565b9050610dc98787838588612571565b610dd4335b4761277f565b9150505b949350505050565b5f610a3b612828565b5f610e0183670de0b6b3a7640000612987565b612987565b9392505050565b610e10612993565b7f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be7008054821115610e3e578181555b7fff9fd4facd8bd30d905cc7ffbd03e8829a414df4c6554d155d132c3377868a42610e67611e29565b8254604080516001600160a01b039093168352602083018690528201526060015b60405180910390a15050565b5f807f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be7005b5492915050565b5f33610ecc8582856129de565b610ed7858585612a92565b506001949350505050565b610eea612993565b805f03610f2e576040517f5a6084530000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b8a565b6001600160a01b0382165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70260205260409020547f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70090821115610fab576001600160a01b0383165f90815260028201602052604090208290555b7fa1e5b368dc99c8558f28b1e7e8cb7ab542c989a4b697628ba7bfffe0aeaccffd610fd4611e29565b6001600160a01b038581165f818152600286016020908152604091829020548251959094168552840191909152820185905260608201526080015b60405180910390a1505050565b5f8061103c84611036335b336110306124f0565b5f612547565b85612b21565b9050610e0133610dce565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f308970152310243260080545f91906001600160a01b0316803b806110845760126110e4565b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e49190615527565b935050505090565b5f807f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f30897015231024326005b546001600160a01b031692915050565b5f8061112a612b38565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156111565750825b90505f8267ffffffffffffffff1660011480156111725750303b155b905081158015611180575080155b156111b7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561120257845468ff00000000000000001916680100000000000000001785555b61120a612b60565b5f8780602001905181019061121f9190615594565b905061122e8160200151612b99565b6020810151516001600160a01b031615611274576040517f8951799200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516001600160a01b03166112b5576040517fd264eed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112be30612d01565b80516112c990612e56565b7ffa89761502e992c8c755fba778ced00f4562485023f656906eb76f5dd65a9fe53360408051808201825284516001600160a01b0316815260208086015190820152905161131892919061568b565b60405180910390a17fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc3965050831561138f57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050919050565b5f610e01836113ac335b33866001612547565b612ed3565b5f6113e37f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b031690565b604051627eeac760e11b81526001600160a01b03858116600483015260248201859052919091169062fdd58e90604401602060405180830381865afa15801561142e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0191906154de565b5f61145b612ee0565b825f03611494576040517f312497b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61153f846114ca7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b031690565b604051627eeac760e11b81526001600160a01b038a81166004830152602482018a9052919091169062fdd58e90604401602060405180830381865afa158015611515573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061153991906154de565b90612f0e565b90508015611644577f88e2280ece62e9296d3578b77647db2c11f9fa7e42578e2db5d4262123ffae3e3387878785886040516115809695949392919061572f565b60405180910390a17f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b03166001600160a01b031663043fa98733883360405160e085901b6001600160e01b03191681526001600160a01b03938416600482015291831660248301529091166044820152606481018890526084810184905260c060a48201525f60c482015260e4015f604051808303815f87803b15801561162d575f80fd5b505af115801561163f573d5f803e3d5ffd5b505050505b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f3dd35eca0ca8a128757fa464a5dfa4ad6cc4853cad96dce4e90fdbea4f0a52e36040518060a001604052808c6001600160a01b031681526020018b81526020018a8152602001878152602001898152506040516020016116db9190615778565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401611708939291906157c3565b5f604051808303815f87803b15801561171f575f80fd5b505af1158015611731573d5f803e3d5ffd5b5093945050505050610dd860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b8282826040517f3ae4063b000000000000000000000000000000000000000000000000000000008152600401610b8a939291906157c3565b6117a2612993565b6001600160a01b0381165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70260205260409020547f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be700904211611857576001600160a01b0382165f818152600283016020526040908190205490517f81a7897700000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610b8a565b6001600160a01b0382165f9081526002820160205260408120557fa1e5b368dc99c8558f28b1e7e8cb7ab542c989a4b697628ba7bfffe0aeaccffd61189a611e29565b604080516001600160a01b03928316815291851660208301525f9082018190526060820152608001610e88565b6118cf612993565b6001600160a01b0381165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70160205260409020547f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be700904211611984576001600160a01b0382165f818152600183016020526040908190205490517ff1b01b5400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610b8a565b6001600160a01b0382165f9081526001820160205260408120557fd08871fffa9d03c01fcba597af5dfbe64cb26f207debdae1af2532695447499161189a611e29565b5f806119d283612f1d565b90505f6119dd612f30565b6001600160a01b0385165f90815260038201602052604081205491925090611a06908490612f91565b5095945050505050565b611a18612993565b611a215f612e56565b565b5f611a2c612ee0565b825f03611a65576040517f312497b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611a7384611539876119c7565b90508015611ac5577f3fc1c49e72362e91416388fe7a107b92db924642476e83e701eeeb6256d7249e3386868487604051611ab29594939291906157ea565b60405180910390a1611ac5853383612a92565b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f54f0af3716c79b30b8c228679d31d77a1a5f526c16af3262730e0a8de4363fed60405180608001604052808b6001600160a01b031681526020018a815260200187815260200189815250604051602001611b569190615821565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401611b83939291906157c3565b5f604051808303815f87803b158015611b9a575f80fd5b505af1158015611bac573d5f803e3d5ffd5b5093945050505050610e0160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611be5612993565b805f03611c29576040517ffd86061b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b8a565b6001600160a01b0382165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70160205260409020547f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70090821115611ca6576001600160a01b0383165f90815260018201602052604090208290555b7fd08871fffa9d03c01fcba597af5dfbe64cb26f207debdae1af25326954474991611ccf611e29565b6001600160a01b038581165f8181526001860160209081526040918290205482519590941685528401919091528201859052606082015260800161100f565b5f8061103c84611d1d33611027565b8561255b565b7fdaffad82f53a38a62340f14cdd6fd3b437c5dcda6b32029dac1e661dbce28b2d3382604051611d54929190615862565b60405180910390a150565b5f80611d6e8485856001612547565b9050805f03611d80575f915050610a7d565b610dd8611db47f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b031690565b604051627eeac760e11b81526001600160a01b03878116600483015260248201879052919091169062fdd58e90604401602060405180830381865afa158015611dff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e2391906154de565b82612987565b5f610a3b61303f565b5f80611e4587610dfc8789886001612547565b9050611e558187878a8888613067565b9695505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091610cfd906154f5565b5f33610d8c818585612a92565b604080515f8152602081019091526060908267ffffffffffffffff811115611ee757611ee7614e98565b604051908082528060200260200182016040528015611f1a57816020015b6060815260200190600190039081611f055790505b5091505f5b83811015611f9b57611f7630868684818110611f3d57611f3d6158aa565b9050602002810190611f4f91906158be565b85604051602001611f629392919061591f565b6040516020818303038152906040526133fc565b838281518110611f8857611f886158aa565b6020908102919091010152600101611f1f565b505092915050565b5f80611fb6876113ac8789886001612547565b9050611e55878787848888613067565b5f610e0183610dfc336113a3565b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd01545f907fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd009085111561203d5760405163725238c160e11b815260048101869052602401610b8a565b5f6120548861204e338a8a5f612547565b5f61255b565b90506120988888838989898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061257192505050565b979650505050505050565b5f806120ad6124f0565b90505f6120c3876120bd33610dac565b87612b21565b9050610dc98187898588612571565b5f807fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd00611110565b5f8061103c84670de0b6b3a764000061204e565b61211b8585858585613497565b61212584846134fa565b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080546040805160a0810182526001600160a01b0388811682528781166020830152918101869052606081018590529116906359f89dda9088907f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a4890608081016121cf7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0254421190565b151590526040516121e3919060200161597c565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401612210939291906157c3565b5f604051808303815f87803b158015612227575f80fd5b505af1158015612239573d5f803e3d5ffd5b50505050505050505050565b835f0361227e576040517f8672985d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0090505f6040518060a001604052808360020154815260200183600201548152602001878152602001861515815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250905084806123185750816002015486115b1561232c5760028201869055602081018690525b7f7ef5cae78e9bd364afb19bb0f8a881a6d156e35a119e28c0d17524e50795815833878787876040516123639594939291906159ee565b60405180910390a181546001600160a01b03166359f89dda337f50a07cb25d0d864370863300b20987dfdae089abad71b607faf639d09d053391846040516020016121e39190615a3c565b6123b6612993565b6001600160a01b0381166123f8576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610b8a565b61240181612e56565b50565b5f6001600160e01b031982167fe5be7d9000000000000000000000000000000000000000000000000000000000148061246657506001600160e01b031982167f439fab9100000000000000000000000000000000000000000000000000000000145b8061249a57506001600160e01b031982167fe1e6b89800000000000000000000000000000000000000000000000000000000145b80610a7d57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0319831614610a7d565b6124da612993565b61240181612d01565b610ca783838360016135ba565b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd01545f907fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0090612541906001615a80565b91505090565b5f670de0b6b3a76400005b95945050505050565b5f61256682846136e2565b610dd884845f613726565b612579612ee0565b845f036125b2576040517fc7838b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f036125eb576040517ffc8c806300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841661262b576040517f6ba9ecd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f0361264d5760405163725238c160e11b81525f6004820152602401610b8a565b7f3377bcbed49a0c0005e53931cd8fe7334b5371523e5de784c0d0d3d01089cfea3385878686866040516126869695949392919061572f565b60405180910390a161269b858585858561373b565b6126a58484613796565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546040517f6d5b3f780000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690636d5b3f789061271590339088908790899088906004016157ea565b5f604051808303815f87803b15801561272c575f80fd5b505af115801561273e573d5f803e3d5ffd5b5050505061274f85858585856137e3565b61277860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b804710156127c2576040517fcf47918100000000000000000000000000000000000000000000000000000000815247600482015260248101829052604401610b8a565b6127db828260405180602001604052805f81525061388f565b156127e4575050565b3d156127f6576127f26138a4565b5050565b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80612832612f30565b60028101549091505f03612848576125416138af565b5f6128575f1960036001613915565b90505f5b5f198214610e01575f836002018381548110612879576128796158aa565b905f5260205f2090600502015f0154905060028103612956575f6129468560020185815481106128ab576128ab6158aa565b905f5260205f20906005020160040180546128c5906154f5565b80601f01602080910402602001604051908101604052809291908181526020018280546128f1906154f5565b801561293c5780601f106129135761010080835404028352916020019161293c565b820191905f5260205f20905b81548152906001019060200180831161291f57829003601f168201915b5050505050613a10565b90506129528382613a25565b9250505b5f8381526004850160205260409020546129709083615a80565b915061297f8360036001613915565b92505061285b565b5f610e01838383613aa9565b3361299c611e29565b6001600160a01b031614611a21576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610b8a565b6001600160a01b038381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160209081526040808320938616835292905220545f19811015612a8c5781811015612a7e576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401610b8a565b612a8c84848484035f6135ba565b50505050565b6001600160a01b038316612ad4576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610b8a565b6001600160a01b038216612b16576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610b8a565b610ca7838383613abe565b5f612b2c82846136e2565b610dd884846001613aa9565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610a7d565b425f03611a21576040517f789a532d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ba1613b11565b612bb381602001518260400151613b19565b80517f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432600805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b0393841617825560608401517f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601805490921693169283179055604080517f481c6a75000000000000000000000000000000000000000000000000000000008152905191925f92909163481c6a759160048083019260209291908290030181865afa158015612c88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cac9190615a93565b90506001600160a01b0381163014610ca7576040517f7935475e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0382166024820152604401610b8a565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f59f89dda0000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015612d7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612da09190615aae565b612dd6576040517ffd12061600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd00805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03831690811782556040805133815260208101929092527fa8c713fe8fb360697fc0daab836d85208a605d485fbc265aea0f773fc6cdd71a9101610e88565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f610e0183836001613726565b612ee8613b2b565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f828218828410028218610e01565b5f80612f2883613b86565b549392505050565b5f8060ff19612f6060017f2f8f8ecf1b7a1a3ceda8d15a9a2247a2377b3434535a87f1728021c13fec2e71615897565b604051602001612f7291815260200190565b60408051601f1981840301815291905280516020909101201692915050565b5f808281612f9d612f30565b9050855f612fae8760036001613915565b90505b5f198114613030579250828115801590612fee57506002836002018281548110612fdd57612fdd6158aa565b905f5260205f2090600502015f0154145b1561301c575f61300c8460020183815481106128ab576128ab6158aa565b90506130188382613a25565b9250505b6130298160036001613915565b9050612fb1565b509350909150505b9250929050565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300611110565b61306f612ee0565b855f036130a8576040517fc7838b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f036130e1576040517ffc8c806300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516613121576040517f6ba9ecd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416613161576040517f9905827b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f036131845760405163725238c160e11b815260048101839052602401610b8a565b7f2845b9458bcc357e1abfe8de7f6832dfe7220596a053496b33d0deb6577d8d2a338686898787876040516131bf9796959493929190615ac9565b60405180910390a16001600160a01b0384163314613316576131e28433856129de565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b03166001600160a01b031663e985e9c585336040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613266573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061328a9190615aae565b613316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201527f6572206f7220617070726f7665640000000000000000000000000000000000006064820152608401610b8a565b6133208484613bf3565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546040517fc2530e390000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c2530e399061339090339088908790899088906004016157ea565b5f604051808303815f87803b1580156133a7575f80fd5b505af11580156133b9573d5f803e3d5ffd5b505050506133cb868686868686613c40565b6133f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60605f6134098484613d49565b905080801561342a57505f3d118061342a57505f846001600160a01b03163b115b1561343f57613437613d5c565b915050610a7d565b8015613482576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610b8a565b3d156127f6576134906138a4565b5092915050565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b03163314612778576040517f8813aac300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be7008054421180159061354357506001600160a01b0383165f908152600182016020526040902054155b801561356657506001600160a01b0382165f908152600282016020526040902054155b15610ca75780546040517f79d7155100000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03808516602483015283166044820152606401610b8a565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b03851661361d576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610b8a565b6001600160a01b03841661365f576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610b8a565b6001600160a01b038086165f9081526001830160209081526040808320938816835292905220839055811561277857836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516136d391815260200190565b60405180910390a35050505050565b818110156127f2576040517fa3e322340000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610b8a565b5f610dd88484670de0b6b3a764000085613d75565b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd01547fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd00906137899084613db7565b6001909101555050505050565b6001600160a01b0382166137d8576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610b8a565b6127f25f8383613abe565b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8216040518060c0016040528061384c3390565b6001600160a01b031681526020018a6001600160a01b031681526020018881526020018b8152602001898152602001878152506040516020016121e39190615b6e565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b5f8060ff196138df60017fb750591399365444a618527b69a54ce09476c8bde1ecff60f5aa1fe2b52605ff615897565b6040516020016138f191815260200190565b60408051601f198184030181529190528051602090910120610eb891166002615a80565b5f600783168103613952576040517fbf3cad0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61395b612f30565b60028101549091505f03613973575f19915050610e01565b5f5f1986146139a657816002018681548110613991576139916158aa565b905f5260205f209060050201600301546139a9565b81545b905060028460028111156139bf576139bf615b80565b036139e1576139d8826139d28484613dc6565b87613e41565b92505050610e01565b60018460028111156139f5576139f5615b80565b03613a05576139d8828287613e99565b611e55828287613e41565b5f81806020019051810190610a7d91906154de565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115613a83576040517fbf463fe900000000000000000000000000000000000000000000000000000000815260048101849052602401610b8a565b5f613aa0613a9a613a94865f613f06565b85613f60565b5f613fc2565b50949350505050565b5f610dd884670de0b6b3a76400008585613d75565b613ac6614003565b613acf83614069565b613ad882614069565b613ae3838383614160565b6001600160a01b038316613afa57610ca7816142c0565b6001600160a01b038216610ca757610ca781614303565b611a2161433d565b613b2161433d565b6127f2828261437b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203611a21576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8060ff19613bb660017fb750591399365444a618527b69a54ce09476c8bde1ecff60f5aa1fe2b52605ff615897565b604051602001613bc891815260200190565b60408051601f1981840301815291815281516020928301205f96875292909216905290922092915050565b6001600160a01b038216613c35576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610b8a565b6127f2825f83613abe565b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e9828696040518060c001604052808a6001600160a01b031681526020018b6001600160a01b031681526020018881526020018c815260200189815260200187815250604051602001613ce69190615b6e565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401613d13939291906157c3565b5f604051808303815f87803b158015613d2a575f80fd5b505af1158015613d3c573d5f803e3d5ffd5b5050505050505050505050565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b5f613da2613d82836143de565b8015613d9d57505f8480613d9857613d98615b94565b868809115b151590565b613dad86868661440a565b6125529190615a80565b5f828218828411028218610e01565b5f5b5f198214158015613e0a575042836002018381548110613dea57613dea6158aa565b5f91825260209091206001600590920201015467ffffffffffffffff1611155b15613e3b57826002018281548110613e2457613e246158aa565b905f5260205f209060050201600301549150613dc8565b50919050565b5f5b5f198314613e8f575f846002018481548110613e6157613e616158aa565b905f5260205f209060050201905082815f0154165f14613e845783915050610e01565b600301549250613e43565b505f199392505050565b5f5b5f198314613e8f575f846002018481548110613eb957613eb96158aa565b5f918252602090912060059091020160018101549091504267ffffffffffffffff9091161115613ee95750613e8f565b8054831615613efb5783915050610e01565b600301549250613e9b565b5f805f613f1385856144ba565b9150915080613f58576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610b8a565b509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480613fa5868686866145c0565b915091505f613fb483836146df565b9a9950505050505050505050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d613ff682828761473d565b9350935050509250929050565b5f61400c612f30565b60028101549091505f0361401d5750565b5f614032826005015460026001176001613915565b90505f195b5f19821461405557508061404e8160036001613915565b9150614037565b5f198114610ca75760058301819055505050565b6001600160a01b03811661407a5750565b5f614083612f30565b6001600160a01b0383165f9081526003820160205260408120549192506140a984612f1d565b90505f806140b78385612f91565b915091508381036140ca57505050505050565b6001600160a01b0386165f9081526003860160205260409020819055818314614101576140f78683614928565b614101838361493a565b6040805185815260208101839052908101849052606081018390526001600160a01b038716907f36a2eb39b73568d38e98721588b15b309c9380e1b1ab575c2c3d71d5148ccb4a9060800160405180910390a26133f484848385614960565b61416a83836134fa565b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a6040518060800160405280896001600160a01b03168152602001886001600160a01b0316815260200187815260200161421a7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0254421190565b151590526040805182516001600160a01b03908116602080840191909152840151168183015290820151606080830191909152909101511515608082015260a0016040516020818303038152906040526040518463ffffffff1660e01b8152600401614288939291906157c3565b5f604051808303815f87803b15801561429f575f80fd5b505af11580156142b1573d5f803e3d5ffd5b50505050612a8c8484846149bd565b5f6142c9612f30565b6002810154909150156127f25760058101545f908152600482016020526040812080548492906142fa908490615a80565b90915550505050565b5f61430c612f30565b6002810154909150156127f25760058101545f908152600482016020526040812080548492906142fa908490615897565b6143456149c8565b611a21576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61438361433d565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036143cf8482615bec565b5060048101612a8c8382615bec565b5f60028260038111156143f3576143f3615b80565b6143fd9190615ca8565b60ff166001149050919050565b5f805f61441786866149e6565b91509150815f0361443b5783818161443157614431615b94565b0492505050610e01565b818411614452576144526003851502601118614a02565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f601b83900b831483838261451e577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156144fe57620186a0860595506005850194505b8586601b0b1461451957600a860595508460010194506144fe565b614534565b855f0361453457505f9250600191506130389050565b848560030b14614590575f85121561455457505f92508291506130389050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610b8a565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f80851584151780156145d8575f92505f91506146d5565b6145e28487615cc9565b91505f6145ee88614a13565b90505f6145fa87614a13565b90505f61460783836149e6565b5090505f6f0785ee10d5da46d900f436a00000000082111561463c576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a764000082111561465d57670de0b6b3a7640000820491506012015b633b9aca0082111561467657633b9aca00820491506009015b61271082111561468b57612710820491506004015b811561469f57600a8204915060010161468b565b6146a98187615cc9565b95506146cb8b8a6146c587876146c087600a615dc8565b614a3c565b89614b17565b9097509550505050505b5094509492505050565b5f805f6146ec85856144ba565b91509150801580156146fc575081155b15613f58576040517f8eba4d070000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610b8a565b5f805f851215614783576040517f4a7d166b0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610b8a565b845f0361479557505f90506001614920565b8460ff84168501858112156147e0576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610b8a565b5f805f83121561484a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215614821575f809550955050505050614920565b825f03600a0a915081848161483857614838615b94565b04955050840290911491506149209050565b5f83131561491557604d8313156148a0576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610b8a565b82600a0a9150815f19816148b6576148b6615b94565b04841115614903576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610b8a565b50919091029250600191506149209050565b509193506001925050505b935093915050565b5f61493283613b86565b919091555050565b6127f282826149476138af565b6149519190615a80565b61495b9190615897565b614c07565b5f614969612f30565b905083816004015f8781526020019081526020015f205f82825461498d9190615897565b90915550505f838152600482016020526040812080548492906149b1908490615a80565b90915550505050505050565b610ca7838383614c73565b5f6149d1612b38565b5468010000000000000000900460ff16919050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f80821215614a3857600160ff1b8203614a325750600160ff1b919050565b505f0390565b5090565b5f805f614a4986866149e6565b91509150815f03614a635783818161443157614431615b94565b838210614aad576040517f6c59da12000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610b8a565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614bc5577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614bb257614b767f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001615a80565b8403614b8a5750600160ff1b905081614bfe565b614b95600a85615dd3565b614b9e90615de6565b614ba9846001615cc9565b91509150614bfe565b614bbb84615de6565b8391509150614bfe565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614bf857614b9e600a85615dd3565b50829050815b94509492505050565b5f60ff19614c3660017fb750591399365444a618527b69a54ce09476c8bde1ecff60f5aa1fe2b52605ff615897565b604051602001614c4891815260200190565b60408051601f198184030181529190528051602090910120614c6c91166002615a80565b9190915550565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038416614cc05781816002015f828254614cb59190615a80565b90915550614d499050565b6001600160a01b0384165f9081526020829052604090205482811015614d2b576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810182905260448101849052606401610b8a565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316614d67576002810180548390039055614d85565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051614dca91815260200190565b60405180910390a350505050565b5f60208284031215614de8575f80fd5b81356001600160e01b031981168114610e01575f80fd5b6001600160a01b0381168114612401575f80fd5b5f60208284031215614e23575f80fd5b8135610e0181614dff565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610e016020830184614e2e565b5f8060408385031215614e7f575f80fd5b8235614e8a81614dff565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff81118282101715614ecf57614ecf614e98565b60405290565b6040516080810167ffffffffffffffff81118282101715614ecf57614ecf614e98565b604051601f8201601f1916810167ffffffffffffffff81118282101715614f2157614f21614e98565b604052919050565b5f67ffffffffffffffff821115614f4257614f42614e98565b50601f01601f191660200190565b5f82601f830112614f5f575f80fd5b8135614f72614f6d82614f29565b614ef8565b818152846020838601011115614f86575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215614fb5575f80fd5b843593506020850135614fc781614dff565b925060408501359150606085013567ffffffffffffffff811115614fe9575f80fd5b614ff587828801614f50565b91505092959194509250565b5f8060408385031215615012575f80fd5b50508035926020909101359150565b5f60208284031215615031575f80fd5b5035919050565b5f805f6060848603121561504a575f80fd5b833561505581614dff565b9250602084013561506581614dff565b929592945050506040919091013590565b5f60208284031215615086575f80fd5b813567ffffffffffffffff81111561509c575f80fd5b610dd884828501614f50565b5f805f80608085870312156150bb575f80fd5b84356150c681614dff565b93506020850135925060408501359150606085013567ffffffffffffffff811115614fe9575f80fd5b5f805f60608486031215615101575f80fd5b833561510c81614dff565b925060208401359150604084013567ffffffffffffffff81111561512e575f80fd5b61513a86828701614f50565b9150509250925092565b5f805f805f60a08688031215615158575f80fd5b85359450602086013561516a81614dff565b9350604086013561517a81614dff565b925060608601359150608086013567ffffffffffffffff81111561519c575f80fd5b6151a888828901614f50565b9150509295509295909350565b5f80602083850312156151c6575f80fd5b823567ffffffffffffffff808211156151dd575f80fd5b818501915085601f8301126151f0575f80fd5b8135818111156151fe575f80fd5b8660208260051b8501011115615212575f80fd5b60209290920196919550909350505050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015615297577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452615285858351614e2e565b9450928501929085019060010161524b565b5092979650505050505050565b5f8083601f8401126152b4575f80fd5b50813567ffffffffffffffff8111156152cb575f80fd5b602083019150836020828501011115613038575f80fd5b5f805f805f608086880312156152f6575f80fd5b85359450602086013561530881614dff565b935060408601359250606086013567ffffffffffffffff81111561532a575f80fd5b615336888289016152a4565b969995985093965092949392505050565b5f8060408385031215615358575f80fd5b823561536381614dff565b9150602083013561537381614dff565b809150509250929050565b5f82601f83011261538d575f80fd5b8135602067ffffffffffffffff8211156153a9576153a9614e98565b8160051b6153b8828201614ef8565b92835284810182019282810190878511156153d1575f80fd5b83870192505b84831015612098578235825291830191908301906153d7565b5f805f805f60a08688031215615404575f80fd5b853561540f81614dff565b9450602086013561541f81614dff565b9350604086013561542f81614dff565b9250606086013567ffffffffffffffff8082111561544b575f80fd5b61545789838a0161537e565b9350608088013591508082111561546c575f80fd5b506151a88882890161537e565b8015158114612401575f80fd5b5f805f8060608587031215615499575f80fd5b8435935060208501356154ab81615479565b9250604085013567ffffffffffffffff8111156154c6575f80fd5b6154d2878288016152a4565b95989497509550505050565b5f602082840312156154ee575f80fd5b5051919050565b600181811c9082168061550957607f821691505b602082108103613e3b57634e487b7160e01b5f52602260045260245ffd5b5f60208284031215615537575f80fd5b815160ff81168114610e01575f80fd5b5f82601f830112615556575f80fd5b8151615564614f6d82614f29565b818152846020838601011115615578575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f602082840312156155a4575f80fd5b815167ffffffffffffffff808211156155bb575f80fd5b90830190604082860312156155ce575f80fd5b6155d6614eac565b82516155e181614dff565b81526020830151828111156155f4575f80fd5b929092019160808387031215615608575f80fd5b615610614ed5565b835161561b81614dff565b815260208401518381111561562e575f80fd5b61563a88828701615547565b602083015250604084015183811115615651575f80fd5b61565d88828701615547565b6040830152506060840151935061567384614dff565b60608101939093526020810192909252509392505050565b5f6001600160a01b038085168352604060208401528084511660408401526020840151604060608501528181511660808501526020810151608060a08601526156d8610100860182614e2e565b905060408201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808683030160c08701526157138282614e2e565b9150508260608301511660e08601528093505050509392505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015283608083015260c060a083015261576c60c0830184614e2e565b98975050505050505050565b602081526001600160a01b0382511660208201526020820151604082015260408201516060820152606082015160808201525f608083015160a080840152610dd860c0840182614e2e565b6001600160a01b0384168152826020820152606060408201525f6125526060830184614e2e565b5f6001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261209860a0830184614e2e565b602081526001600160a01b03825116602082015260208201516040820152604082015160608201525f6060830151608080840152610dd860a0840182614e2e565b6001600160a01b0383168152604060208201525f610dd86040830184614e2e565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610a7d57610a7d615883565b634e487b7160e01b5f52603260045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158f1575f80fd5b83018035915067ffffffffffffffff82111561590b575f80fd5b602001915036819003821315613038575f80fd5b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f815180845260208085019450602084015f5b8381101561597157815187529582019590820190600101615955565b509495945050505050565b602081525f6001600160a01b0380845116602084015280602085015116604084015250604083015160a060608401526159b860c0840182615942565b90506060840151601f198483030160808501526159d58282615942565b9150506080840151151560a08401528091505092915050565b6001600160a01b0386168152846020820152831515604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f19160101949350505050565b602081528151602082015260208201516040820152604082015160608201526060820151151560808201525f608083015160a080840152610dd860c0840182614e2e565b80820180821115610a7d57610a7d615883565b5f60208284031215615aa3575f80fd5b8151610e0181614dff565b5f60208284031215615abe575f80fd5b8151610e0181615479565b5f6001600160a01b03808a16835280891660208401528088166040840152508560608301528460808301528360a083015260e060c0830152615b0e60e0830184614e2e565b9998505050505050505050565b5f6001600160a01b038083511684528060208401511660208501525060408201516040840152606082015160608401526080820151608084015260a082015160c060a0850152610dd860c0850182614e2e565b602081525f610e016020830184615b1b565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b601f821115610ca757805f5260205f20601f840160051c81016020851015615bcd5750805b601f840160051c820191505b81811015612778575f8155600101615bd9565b815167ffffffffffffffff811115615c0657615c06614e98565b615c1a81615c1484546154f5565b84615ba8565b602080601f831160018114615c4d575f8415615c365750858301515b5f19600386901b1c1916600185901b1785556133f4565b5f85815260208120601f198616915b82811015615c7b57888601518255948401946001909101908401615c5c565b5085821015615c9857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60ff831680615cba57615cba615b94565b8060ff84160691505092915050565b8082018281125f831280158216821582161715611f9b57611f9b615883565b600181815b80851115615d2257815f1904821115615d0857615d08615883565b80851615615d1557918102915b93841c9390800290615ced565b509250929050565b5f82615d3857506001610a7d565b81615d4457505f610a7d565b8160018114615d5a5760028114615d6457615d80565b6001915050610a7d565b60ff841115615d7557615d75615883565b50506001821b610a7d565b5060208310610133831016604e8410600b8410161715615da3575081810a610a7d565b615dad8383615ce8565b805f1904821115615dc057615dc0615883565b029392505050565b5f610e018383615d2a565b5f82615de157615de1615b94565b500490565b5f600160ff1b8203614a3257614a3261588356"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405260043610610337575f3560e01c8063715018a6116101af578063bbec4d06116100eb578063dd62ed3e11610094578063e70689f51161006e578063e70689f5146109ab578063f2fde38b146109ca578063f5647943146109e9578063f5d214f514610a1e5761033e565b8063dd62ed3e146108ed578063e1e6b89814610950578063e5be7d901461098c5761033e565b8063c77b66c2116100c5578063c77b66c2146108b3578063d09edf31146108c6578063db2088f4146108da5761033e565b8063bbec4d0614610875578063c54cafee14610894578063c63d75b6146105635761033e565b80638da5cb5b11610158578063a9059cbb11610132578063a9059cbb146107b8578063ac9650d8146107d7578063ae57de0c14610803578063ae98b39f146108225761033e565b80638da5cb5b14610771578063921a4c421461078557806395d89b41146107a45761033e565b80637a7af70d116101895780637a7af70d1461072057806381c3fcb91461073357806385b68756146107525761033e565b8063715018a6146106ce578063770afee1146106e2578063786cd916146107015761033e565b8063276b11401161027e5780634abe413711610227578063633ac71711610201578063633ac7171461061e5780636ba235211461063d5780636c876b941461069057806370a08231146106af5761033e565b80634abe4137146105c157806356db02e8146105e057806359f89dda146105ff5761033e565b8063402d267d11610258578063402d267d14610563578063439fab9114610583578063488bd7b0146105a25761033e565b8063276b1140146104fe578063313ce5671461051157806338d52e0f146105375761033e565b806318160ddd116102e05780631f6759d3116102ba5780631f6759d31461048d57806323b872dd146104c05780632755c6c7146104df5761033e565b806318160ddd1461043b578063181e7b3b1461044f5780631e4344a11461046e5761033e565b806306fdde031161031157806306fdde03146103e8578063095ea7b3146104095780631423feba146104285761033e565b806301e1d1141461037357806301ffc9a71461039a578063058a628f146103c95761033e565b3661033e57005b73b7e24412126ad6a2ce19cbd79fd11b68e7f30cf6365f80375f80365f845af43d5f803e80801561036d573d5ff35b3d5ffd5b005b34801561037e575f80fd5b50610387610a51565b6040519081526020015b60405180910390f35b3480156103a5575f80fd5b506103b96103b4366004614f0e565b610a5f565b6040519015158152602001610391565b3480156103d4575f80fd5b506103716103e3366004614f61565b610aba565b3480156103f3575f80fd5b506103fc610ce3565b6040516103919190614faa565b348015610414575f80fd5b506103b9610423366004614fbc565b610db6565b610387610436366004615109565b610dcd565b348015610446575f80fd5b50610387610e17565b34801561045a575f80fd5b50610387610469366004615168565b610e20565b348015610479575f80fd5b50610371610488366004615188565b610e3f565b348015610498575f80fd5b507f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70054610387565b3480156104cb575f80fd5b506103b96104da36600461519f565b610ecb565b3480156104ea575f80fd5b506103716104f9366004614fbc565b610eee565b61038761050c366004615168565b611028565b34801561051c575f80fd5b50610525611053565b60405160ff9091168152602001610391565b348015610542575f80fd5b5061054b6110f8565b6040516001600160a01b039091168152602001610391565b34801561056e575f80fd5b5061038761057d366004614f61565b505f1990565b34801561058e575f80fd5b5061038761059d3660046151dd565b61112c565b3480156105ad575f80fd5b506103876105bc366004615168565b6113d1565b3480156105cc575f80fd5b506103876105db366004614fbc565b6113e9565b3480156105eb575f80fd5b506103876105fa36600461520f565b6114a3565b34801561060a575f80fd5b50610371610619366004615256565b6117e4565b348015610629575f80fd5b50610371610638366004614f61565b61181c565b348015610648575f80fd5b50610387610657366004614f61565b6001600160a01b03165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be701602052604090205490565b34801561069b575f80fd5b506103716106aa366004614f61565b611949565b3480156106ba575f80fd5b506103876106c9366004614f61565b611a49565b3480156106d9575f80fd5b50610371611a92565b3480156106ed575f80fd5b506103876106fc366004615256565b611aa5565b34801561070c575f80fd5b5061037161071b366004614fbc565b611c5f565b61038761072e366004615168565b611d90565b34801561073e575f80fd5b5061037161074d3660046151dd565b611da5565b34801561075d575f80fd5b5061038761076c366004614fbc565b611de1565b34801561077c575f80fd5b5061054b611ec4565b348015610790575f80fd5b5061038761079f3660046152ab565b611ecd565b3480156107af575f80fd5b506103fc611efa565b3480156107c3575f80fd5b506103b96107d2366004614fbc565b611f4b565b3480156107e2575f80fd5b506107f66107f136600461531c565b611f58565b604051610391919061538b565b34801561080e575f80fd5b5061038761081d3660046152ab565b61203e565b34801561082d575f80fd5b5061038761083c366004614f61565b6001600160a01b03165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be702602052604090205490565b348015610880575f80fd5b5061038761088f366004615168565b612061565b34801561089f575f80fd5b506103876108ae366004615449565b61206f565b6103876108c1366004615109565b612157565b3480156108d1575f80fd5b5061054b612186565b6103876108e8366004615168565b6121ae565b3480156108f8575f80fd5b506103876109073660046154ae565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b34801561095b575f80fd5b507f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b031661054b565b348015610997575f80fd5b506103716109a6366004615557565b6121c2565b3480156109b6575f80fd5b506103716109c53660046155ed565b6122f9565b3480156109d5575f80fd5b506103716109e4366004614f61565b612462565b3480156109f4575f80fd5b507fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd025442116103b9565b348015610a29575f80fd5b507fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0154610387565b5f610a5a610e17565b905090565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f59f89dda000000000000000000000000000000000000000000000000000000001480610ab45750610ab4826124b8565b92915050565b6040517f248a9ca30000000000000000000000000000000000000000000000000000000081527ffc0b9a47b723baf66339577301d13949cab2da29c3baeaa9cfc1f36c513e8f8960048201525f906001600160a01b0383169063248a9ca390602401602060405180830381865afa158015610b37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b5b9190615645565b905080610bca576040517f76728ed90000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201527ffc0b9a47b723baf66339577301d13949cab2da29c3baeaa9cfc1f36c513e8f8960248201526044015b60405180910390fd5b6040517f248a9ca30000000000000000000000000000000000000000000000000000000081527f921a3c774c4abecc1bddc4f7beb397fdb2cde7806021d9571086abb74cd023e760048201525f906001600160a01b0384169063248a9ca390602401602060405180830381865afa158015610c47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c6b9190615645565b905080610cd5576040517f76728ed90000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527f921a3c774c4abecc1bddc4f7beb397fdb2cde7806021d9571086abb74cd023e76024820152604401610bc1565b610cde836125e6565b505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091610d349061565c565b80601f0160208091040260200160405190810160405280929190818152602001828054610d609061565c565b8015610dab5780601f10610d8257610100808354040283529160200191610dab565b820191905f5260205f20905b815481529060010190602001808311610d8e57829003601f168201915b505050505091505090565b5f33610dc38185856125f7565b5060019392505050565b5f80610dd7612604565b90505f610df187610deb335b89865f61265b565b8761266f565b9050610e008787838588612685565b610e0b335b476128ac565b9150505b949350505050565b5f610a5a612955565b5f610e3883670de0b6b3a7640000612ab4565b612ab4565b9392505050565b610e47612ac0565b7f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be7008054821115610e75578181555b7fff9fd4facd8bd30d905cc7ffbd03e8829a414df4c6554d155d132c3377868a42610e9e611ec4565b8254604080516001600160a01b039093168352602083018690528201526060015b60405180910390a15050565b5f33610ed8858285612b0b565b610ee3858585612bbf565b506001949350505050565b610ef6612ac0565b805f03610f3a576040517f5a6084530000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610bc1565b6001600160a01b0382165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70260205260409020547f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70090821115610fb7576001600160a01b0383165f90815260028201602052604090208290555b7fa1e5b368dc99c8558f28b1e7e8cb7ab542c989a4b697628ba7bfffe0aeaccffd610fe0611ec4565b6001600160a01b038581165f818152600286016020908152604091829020548251959094168552840191909152820185905260608201526080015b60405180910390a1505050565b5f8061104884611042335b3361103c612604565b5f61265b565b85612c4e565b9050610e3833610e05565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f308970152310243260080545f91906001600160a01b0316803b806110905760126110f0565b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f091906156a7565b935050505090565b5f807f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f30897015231024326005b546001600160a01b031692915050565b5f80611136612c65565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156111625750825b90505f8267ffffffffffffffff16600114801561117e5750303b155b90508115801561118c575080155b156111c3576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156112245784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61122c612c8d565b5f878060200190518101906112419190615714565b90506112508160200151612cc6565b6020810151516001600160a01b031615611296576040517f8951799200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516001600160a01b03166112d7576040517fd264eed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112e030612e39565b80516112eb90612f99565b7ffa89761502e992c8c755fba778ced00f4562485023f656906eb76f5dd65a9fe53360408051808201825284516001600160a01b0316815260208086015190820152905161133a92919061580b565b60405180910390a17fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc396505083156113c75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050919050565b5f610e38836113e4335b3386600161265b565b613021565b5f61141b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b031690565b6040517efdd58e0000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260248201859052919091169062fdd58e90604401602060405180830381865afa15801561147f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e389190615645565b5f6114ac61302e565b825f036114e5576040517f312497b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6115a98461151b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b031690565b6040517efdd58e0000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152602482018a9052919091169062fdd58e90604401602060405180830381865afa15801561157f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115a39190615645565b9061305c565b905080156116c6577f88e2280ece62e9296d3578b77647db2c11f9fa7e42578e2db5d4262123ffae3e3387878785886040516115ea969594939291906158af565b60405180910390a17f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b03166001600160a01b031663043fa98733883360405160e085901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03938416600482015291831660248301529091166044820152606481018890526084810184905260c060a48201525f60c482015260e4015f604051808303815f87803b1580156116af575f80fd5b505af11580156116c1573d5f803e3d5ffd5b505050505b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f3dd35eca0ca8a128757fa464a5dfa4ad6cc4853cad96dce4e90fdbea4f0a52e36040518060a001604052808c6001600160a01b031681526020018b81526020018a81526020018781526020018981525060405160200161175d91906158f8565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161178a93929190615943565b5f604051808303815f87803b1580156117a1575f80fd5b505af11580156117b3573d5f803e3d5ffd5b5093945050505050610e0f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b8282826040517f3ae4063b000000000000000000000000000000000000000000000000000000008152600401610bc193929190615943565b611824612ac0565b6001600160a01b0381165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70260205260409020547f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be7009042116118d9576001600160a01b0382165f818152600283016020526040908190205490517f81a7897700000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610bc1565b6001600160a01b0382165f9081526002820160205260408120557fa1e5b368dc99c8558f28b1e7e8cb7ab542c989a4b697628ba7bfffe0aeaccffd61191c611ec4565b604080516001600160a01b03928316815291851660208301525f9082018190526060820152608001610ebf565b611951612ac0565b6001600160a01b0381165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70160205260409020547f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be700904211611a06576001600160a01b0382165f818152600183016020526040908190205490517ff1b01b5400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610bc1565b6001600160a01b0382165f9081526001820160205260408120557fd08871fffa9d03c01fcba597af5dfbe64cb26f207debdae1af2532695447499161191c611ec4565b5f80611a548361306b565b90505f611a5f61307e565b6001600160a01b0385165f90815260038201602052604081205491925090611a889084906130df565b5095945050505050565b611a9a612ac0565b611aa35f612f99565b565b5f611aae61302e565b825f03611ae7576040517f312497b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611af5846115a387611a49565b90508015611b47577f3fc1c49e72362e91416388fe7a107b92db924642476e83e701eeeb6256d7249e3386868487604051611b3495949392919061596a565b60405180910390a1611b47853383612bbf565b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f54f0af3716c79b30b8c228679d31d77a1a5f526c16af3262730e0a8de4363fed60405180608001604052808b6001600160a01b031681526020018a815260200187815260200189815250604051602001611bd891906159a1565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401611c0593929190615943565b5f604051808303815f87803b158015611c1c575f80fd5b505af1158015611c2e573d5f803e3d5ffd5b5093945050505050610e3860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611c67612ac0565b805f03611cab576040517ffd86061b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610bc1565b6001600160a01b0382165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70160205260409020547f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70090821115611d28576001600160a01b0383165f90815260018201602052604090208290555b7fd08871fffa9d03c01fcba597af5dfbe64cb26f207debdae1af25326954474991611d51611ec4565b6001600160a01b038581165f8181526001860160209081526040918290205482519590941685528401919091528201859052606082015260800161101b565b5f8061104884611d9f33611033565b8561266f565b7fdaffad82f53a38a62340f14cdd6fd3b437c5dcda6b32029dac1e661dbce28b2d3382604051611dd69291906159e2565b60405180910390a150565b5f80611df0848585600161265b565b9050805f03611e02575f915050610ab4565b610e0f611e367f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b031690565b6040517efdd58e0000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015260248201879052919091169062fdd58e90604401602060405180830381865afa158015611e9a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ebe9190615645565b82612ab4565b5f610a5a61318d565b5f80611ee087610e33878988600161265b565b9050611ef08187878a88886131b5565b9695505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091610d349061565c565b5f33610dc3818585612bbf565b604080515f8152602081019091526060908267ffffffffffffffff811115611f8257611f82614fe6565b604051908082528060200260200182016040528015611fb557816020015b6060815260200190600190039081611fa05790505b5091505f5b838110156120365761201130868684818110611fd857611fd8615a43565b9050602002810190611fea9190615a70565b85604051602001611ffd93929190615ad1565b60405160208183030381529060405261357b565b83828151811061202357612023615a43565b6020908102919091010152600101611fba565b505092915050565b5f80612051876113e4878988600161265b565b9050611ef08787878488886131b5565b5f610e3883610e33336113db565b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd01545f907fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd00908511156120f1576040517fe4a4718200000000000000000000000000000000000000000000000000000000815260048101869052602401610bc1565b5f61210888612102338a8a5f61265b565b5f61266f565b905061214c8888838989898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061268592505050565b979650505050505050565b5f80612161612604565b90505f6121778761217133610de3565b87612c4e565b9050610e008187898588612685565b5f807fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0061111c565b5f8061104884670de0b6b3a7640000612102565b6121cf8585858585613616565b6121d98484613679565b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080546040805160a0810182526001600160a01b0388811682528781166020830152918101869052606081018590529116906359f89dda9088907f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a4890608081016122837fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0254421190565b151590526040516122979190602001615b2e565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016122c493929190615943565b5f604051808303815f87803b1580156122db575f80fd5b505af11580156122ed573d5f803e3d5ffd5b50505050505050505050565b835f03612332576040517f8672985d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0090505f6040518060a001604052808360020154815260200183600201548152602001878152602001861515815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250905084806123cc5750816002015486115b156123e05760028201869055602081018690525b7f7ef5cae78e9bd364afb19bb0f8a881a6d156e35a119e28c0d17524e5079581583387878787604051612417959493929190615ba0565b60405180910390a181546001600160a01b03166359f89dda337f50a07cb25d0d864370863300b20987dfdae089abad71b607faf639d09d053391846040516020016122979190615bee565b61246a612ac0565b6001600160a01b0381166124ac576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc1565b6124b581612f99565b50565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fe5be7d9000000000000000000000000000000000000000000000000000000000148061254a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f439fab9100000000000000000000000000000000000000000000000000000000145b8061259657507fffffffff0000000000000000000000000000000000000000000000000000000082167fe1e6b89800000000000000000000000000000000000000000000000000000000145b80610ab457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610ab4565b6125ee612ac0565b6124b581612e39565b610cde8383836001613739565b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd01545f907fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0090612655906001615c32565b91505090565b5f670de0b6b3a76400005b95945050505050565b5f61267a8284613861565b610e0f84845f6138a5565b61268d61302e565b845f036126c6576040517fc7838b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f036126ff576040517ffc8c806300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841661273f576040517f6ba9ecd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f0361277a576040517fe4a471820000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc1565b7f3377bcbed49a0c0005e53931cd8fe7334b5371523e5de784c0d0d3d01089cfea3385878686866040516127b3969594939291906158af565b60405180910390a16127c885858585856138ba565b6127d28484613915565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546040517f6d5b3f780000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690636d5b3f7890612842903390889087908990889060040161596a565b5f604051808303815f87803b158015612859575f80fd5b505af115801561286b573d5f803e3d5ffd5b5050505061287c8585858585613962565b6128a560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b804710156128ef576040517fcf47918100000000000000000000000000000000000000000000000000000000815247600482015260248101829052604401610bc1565b612908828260405180602001604052805f815250613a0e565b15612911575050565b3d156129235761291f613a23565b5050565b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8061295f61307e565b60028101549091505f0361297557612655613a2e565b5f6129845f1960036001613a93565b90505f5b5f198214610e38575f8360020183815481106129a6576129a6615a43565b905f5260205f2090600502015f0154905060028103612a83575f612a738560020185815481106129d8576129d8615a43565b905f5260205f20906005020160040180546129f29061565c565b80601f0160208091040260200160405190810160405280929190818152602001828054612a1e9061565c565b8015612a695780601f10612a4057610100808354040283529160200191612a69565b820191905f5260205f20905b815481529060010190602001808311612a4c57829003601f168201915b5050505050613b8e565b9050612a7f8382613ba3565b9250505b5f838152600485016020526040902054612a9d9083615c32565b9150612aac8360036001613a93565b925050612988565b5f610e38838383613c27565b33612ac9611ec4565b6001600160a01b031614611aa3576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610bc1565b6001600160a01b038381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160209081526040808320938616835292905220545f19811015612bb95781811015612bab576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401610bc1565b612bb984848484035f613739565b50505050565b6001600160a01b038316612c01576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc1565b6001600160a01b038216612c43576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc1565b610cde838383613c3c565b5f612c598284613861565b610e0f84846001613c27565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610ab4565b425f03611aa3576040517f789a532d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cce613c8f565b612ce081602001518260400151613c97565b80517f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f308970152310243260080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b0393841617825560608401517f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601805490921693169283179055604080517f481c6a75000000000000000000000000000000000000000000000000000000008152905191925f92909163481c6a759160048083019260209291908290030181865afa158015612dc0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612de49190615c45565b90506001600160a01b0381163014610cde576040517f7935475e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0382166024820152604401610bc1565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f59f89dda0000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015612eb4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed89190615c60565b612f0e576040517ffd12061600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03831690811782556040805133815260208101929092527fa8c713fe8fb360697fc0daab836d85208a605d485fbc265aea0f773fc6cdd71a9101610ebf565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f610e38838360016138a5565b613036613ca9565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f828218828410028218610e38565b5f8061307683613d04565b549392505050565b5f8060ff196130ae60017f2f8f8ecf1b7a1a3ceda8d15a9a2247a2377b3434535a87f1728021c13fec2e71615a30565b6040516020016130c091815260200190565b60408051601f1981840301815291905280516020909101201692915050565b5f8082816130eb61307e565b9050855f6130fc8760036001613a93565b90505b5f19811461317e57925082811580159061313c5750600283600201828154811061312b5761312b615a43565b905f5260205f2090600502015f0154145b1561316a575f61315a8460020183815481106129d8576129d8615a43565b90506131668382613ba3565b9250505b6131778160036001613a93565b90506130ff565b509350909150505b9250929050565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930061111c565b6131bd61302e565b855f036131f6576040517fc7838b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f0361322f576040517ffc8c806300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661326f576040517f6ba9ecd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166132af576040517f9905827b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f036132eb576040517fe4a4718200000000000000000000000000000000000000000000000000000000815260048101839052602401610bc1565b7f2845b9458bcc357e1abfe8de7f6832dfe7220596a053496b33d0deb6577d8d2a338686898787876040516133269796959493929190615c7b565b60405180910390a16001600160a01b038416331461349557613349843385612b0b565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b03166001600160a01b031663e985e9c585336040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156133e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134099190615c60565b613495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201527f6572206f7220617070726f7665640000000000000000000000000000000000006064820152608401610bc1565b61349f8484613d71565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546040517fc2530e390000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c2530e399061350f903390889087908990889060040161596a565b5f604051808303815f87803b158015613526575f80fd5b505af1158015613538573d5f803e3d5ffd5b5050505061354a868686868686613dbe565b61357360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60605f6135888484613ec7565b90508080156135a957505f3d11806135a957505f846001600160a01b03163b115b156135be576135b6613eda565b915050610ab4565b8015613601576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610bc1565b3d156129235761360f613a23565b5092915050565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b031633146128a5576040517f8813aac300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be700805442118015906136c257506001600160a01b0383165f908152600182016020526040902054155b80156136e557506001600160a01b0382165f908152600282016020526040902054155b15610cde5780546040517f79d7155100000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03808516602483015283166044820152606401610bc1565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b03851661379c576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc1565b6001600160a01b0384166137de576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc1565b6001600160a01b038086165f908152600183016020908152604080832093881683529290522083905581156128a557836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161385291815260200190565b60405180910390a35050505050565b8181101561291f576040517fa3e322340000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610bc1565b5f610e0f8484670de0b6b3a764000085613ef3565b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd01547fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd00906139089084613f35565b6001909101555050505050565b6001600160a01b038216613957576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc1565b61291f5f8383613c3c565b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8216040518060c001604052806139cb3390565b6001600160a01b031681526020018a6001600160a01b031681526020018881526020018b8152602001898152602001878152506040516020016122979190615d20565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b5f8060ff19613a5e60017fb750591399365444a618527b69a54ce09476c8bde1ecff60f5aa1fe2b52605ff615a30565b604051602001613a7091815260200190565b60408051808303601f190181529190528051602090910120166002015492915050565b5f600783168103613ad0576040517fbf3cad0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613ad961307e565b60028101549091505f03613af1575f19915050610e38565b5f5f198614613b2457816002018681548110613b0f57613b0f615a43565b905f5260205f20906005020160030154613b27565b81545b90506002846002811115613b3d57613b3d615d32565b03613b5f57613b5682613b508484613f44565b87613fbf565b92505050610e38565b6001846002811115613b7357613b73615d32565b03613b8357613b56828287614017565b611ef0828287613fbf565b5f81806020019051810190610ab49190615645565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115613c01576040517fbf463fe900000000000000000000000000000000000000000000000000000000815260048101849052602401610bc1565b5f613c1e613c18613c12865f614084565b856140de565b5f614140565b50949350505050565b5f610e0f84670de0b6b3a76400008585613ef3565b613c44614181565b613c4d836141e7565b613c56826141e7565b613c618383836142d4565b6001600160a01b038316613c7857610cde81614434565b6001600160a01b038216610cde57610cde81614477565b611aa36144b1565b613c9f6144b1565b61291f82826144ef565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203611aa3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8060ff19613d3460017fb750591399365444a618527b69a54ce09476c8bde1ecff60f5aa1fe2b52605ff615a30565b604051602001613d4691815260200190565b60408051601f1981840301815291815281516020928301205f96875292909216905290922092915050565b6001600160a01b038216613db3576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc1565b61291f825f83613c3c565b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e9828696040518060c001604052808a6001600160a01b031681526020018b6001600160a01b031681526020018881526020018c815260200189815260200187815250604051602001613e649190615d20565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401613e9193929190615943565b5f604051808303815f87803b158015613ea8575f80fd5b505af1158015613eba573d5f803e3d5ffd5b5050505050505050505050565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b5f613f20613f0083614552565b8015613f1b57505f8480613f1657613f16615d5f565b868809115b151590565b613f2b86868661457e565b6126669190615c32565b5f828218828411028218610e38565b5f5b5f198214158015613f88575042836002018381548110613f6857613f68615a43565b5f91825260209091206001600590920201015467ffffffffffffffff1611155b15613fb957826002018281548110613fa257613fa2615a43565b905f5260205f209060050201600301549150613f46565b50919050565b5f5b5f19831461400d575f846002018481548110613fdf57613fdf615a43565b905f5260205f209060050201905082815f0154165f146140025783915050610e38565b600301549250613fc1565b505f199392505050565b5f5b5f19831461400d575f84600201848154811061403757614037615a43565b5f918252602090912060059091020160018101549091504267ffffffffffffffff9091161115614067575061400d565b80548316156140795783915050610e38565b600301549250614019565b5f805f614091858561462e565b91509150806140d6576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610bc1565b509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d848061412386868686614734565b915091505f6141328383614853565b9a9950505050505050505050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d6141748282876148b1565b9350935050509250929050565b5f61418a61307e565b60028101549091505f0361419b5750565b5f6141b0826005015460026001176001613a93565b90505f195b5f1982146141d35750806141cc8160036001613a93565b91506141b5565b5f198114610cde5760058301819055505050565b6001600160a01b0381166141f85750565b5f61420161307e565b6001600160a01b0383165f9081526003820160205260408120549192506142278461306b565b90505f8061423583856130df565b9150915083810361424857505050505050565b6001600160a01b0386165f9081526003860160205260409020819055818314614275576142758683614a9c565b6040805185815260208101839052908101849052606081018390526001600160a01b038716907f36a2eb39b73568d38e98721588b15b309c9380e1b1ab575c2c3d71d5148ccb4a9060800160405180910390a261357384848385614aae565b6142de8383613679565b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a6040518060800160405280896001600160a01b03168152602001886001600160a01b0316815260200187815260200161438e7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0254421190565b151590526040805182516001600160a01b03908116602080840191909152840151168183015290820151606080830191909152909101511515608082015260a0016040516020818303038152906040526040518463ffffffff1660e01b81526004016143fc93929190615943565b5f604051808303815f87803b158015614413575f80fd5b505af1158015614425573d5f803e3d5ffd5b50505050612bb9848484614b0b565b5f61443d61307e565b60028101549091501561291f5760058101545f9081526004820160205260408120805484929061446e908490615c32565b90915550505050565b5f61448061307e565b60028101549091501561291f5760058101545f9081526004820160205260408120805484929061446e908490615a30565b6144b9614b16565b611aa3576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144f76144b1565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036145438482615dd0565b5060048101612bb98382615dd0565b5f600282600381111561456757614567615d32565b6145719190615e8c565b60ff166001149050919050565b5f805f61458b8686614b34565b91509150815f036145af578381816145a5576145a5615d5f565b0492505050610e38565b8184116145c6576145c66003851502601118614b50565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f601b83900b8314838382614692577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e100000000000000000086051561467257620186a0860595506005850194505b8586601b0b1461468d57600a86059550846001019450614672565b6146a8565b855f036146a857505f9250600191506131869050565b848560030b14614704575f8512156146c857505f92508291506131869050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610bc1565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f808515841517801561474c575f92505f9150614849565b6147568487615ead565b91505f61476288614b61565b90505f61476e87614b61565b90505f61477b8383614b34565b5090505f6f0785ee10d5da46d900f436a0000000008211156147b0576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a76400008211156147d157670de0b6b3a7640000820491506012015b633b9aca008211156147ea57633b9aca00820491506009015b6127108211156147ff57612710820491506004015b811561481357600a820491506001016147ff565b61481d8187615ead565b955061483f8b8a614839878761483487600a615fac565b614bc2565b89614c9d565b9097509550505050505b5094509492505050565b5f805f614860858561462e565b9150915080158015614870575081155b156140d6576040517f8eba4d070000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610bc1565b5f805f8512156148f7576040517f4a7d166b0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610bc1565b845f0361490957505f90506001614a94565b8460ff8416850185811215614954576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610bc1565b5f805f8312156149be577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215614995575f809550955050505050614a94565b825f03600a0a91508184816149ac576149ac615d5f565b0495505084029091149150614a949050565b5f831315614a8957604d831315614a14576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610bc1565b82600a0a9150815f1981614a2a57614a2a615d5f565b04841115614a77576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610bc1565b5091909102925060019150614a949050565b509193506001925050505b935093915050565b5f614aa683613d04565b919091555050565b5f614ab761307e565b905083816004015f8781526020019081526020015f205f828254614adb9190615a30565b90915550505f83815260048201602052604081208054849290614aff908490615c32565b90915550505050505050565b610cde838383614da9565b5f614b1f612c65565b5468010000000000000000900460ff16919050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f80821215614bbe577f80000000000000000000000000000000000000000000000000000000000000008203614bb857507f8000000000000000000000000000000000000000000000000000000000000000919050565b505f0390565b5090565b5f805f614bcf8686614b34565b91509150815f03614be9578381816145a5576145a5615d5f565b838210614c33576040517f6c59da12000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610bc1565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614d67577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614d5457614cfc7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001615c32565b8403614d2c57507f8000000000000000000000000000000000000000000000000000000000000000905081614da0565b614d37600a85615fb7565b614d4090615fca565b614d4b846001615ead565b91509150614da0565b614d5d84615fca565b8391509150614da0565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614d9a57614d40600a85615fb7565b50829050815b94509492505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038416614df65781816002015f828254614deb9190615c32565b90915550614e7f9050565b6001600160a01b0384165f9081526020829052604090205482811015614e61576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810182905260448101849052606401610bc1565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316614e9d576002810180548390039055614ebb565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051614f0091815260200190565b60405180910390a350505050565b5f60208284031215614f1e575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e38575f80fd5b6001600160a01b03811681146124b5575f80fd5b5f60208284031215614f71575f80fd5b8135610e3881614f4d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610e386020830184614f7c565b5f8060408385031215614fcd575f80fd5b8235614fd881614f4d565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff8111828210171561503657615036614fe6565b60405290565b6040516080810167ffffffffffffffff8111828210171561503657615036614fe6565b604051601f8201601f1916810167ffffffffffffffff8111828210171561508857615088614fe6565b604052919050565b5f67ffffffffffffffff8211156150a9576150a9614fe6565b50601f01601f191660200190565b5f82601f8301126150c6575f80fd5b81356150d96150d482615090565b61505f565b8181528460208386010111156150ed575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f806080858703121561511c575f80fd5b84359350602085013561512e81614f4d565b925060408501359150606085013567ffffffffffffffff811115615150575f80fd5b61515c878288016150b7565b91505092959194509250565b5f8060408385031215615179575f80fd5b50508035926020909101359150565b5f60208284031215615198575f80fd5b5035919050565b5f805f606084860312156151b1575f80fd5b83356151bc81614f4d565b925060208401356151cc81614f4d565b929592945050506040919091013590565b5f602082840312156151ed575f80fd5b813567ffffffffffffffff811115615203575f80fd5b610e0f848285016150b7565b5f805f8060808587031215615222575f80fd5b843561522d81614f4d565b93506020850135925060408501359150606085013567ffffffffffffffff811115615150575f80fd5b5f805f60608486031215615268575f80fd5b833561527381614f4d565b925060208401359150604084013567ffffffffffffffff811115615295575f80fd5b6152a1868287016150b7565b9150509250925092565b5f805f805f60a086880312156152bf575f80fd5b8535945060208601356152d181614f4d565b935060408601356152e181614f4d565b925060608601359150608086013567ffffffffffffffff811115615303575f80fd5b61530f888289016150b7565b9150509295509295909350565b5f806020838503121561532d575f80fd5b823567ffffffffffffffff80821115615344575f80fd5b818501915085601f830112615357575f80fd5b813581811115615365575f80fd5b8660208260051b8501011115615379575f80fd5b60209290920196919550909350505050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b828110156153fe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526153ec858351614f7c565b945092850192908501906001016153b2565b5092979650505050505050565b5f8083601f84011261541b575f80fd5b50813567ffffffffffffffff811115615432575f80fd5b602083019150836020828501011115613186575f80fd5b5f805f805f6080868803121561545d575f80fd5b85359450602086013561546f81614f4d565b935060408601359250606086013567ffffffffffffffff811115615491575f80fd5b61549d8882890161540b565b969995985093965092949392505050565b5f80604083850312156154bf575f80fd5b82356154ca81614f4d565b915060208301356154da81614f4d565b809150509250929050565b5f82601f8301126154f4575f80fd5b8135602067ffffffffffffffff82111561551057615510614fe6565b8160051b61551f82820161505f565b9283528481018201928281019087851115615538575f80fd5b83870192505b8483101561214c5782358252918301919083019061553e565b5f805f805f60a0868803121561556b575f80fd5b853561557681614f4d565b9450602086013561558681614f4d565b9350604086013561559681614f4d565b9250606086013567ffffffffffffffff808211156155b2575f80fd5b6155be89838a016154e5565b935060808801359150808211156155d3575f80fd5b5061530f888289016154e5565b80151581146124b5575f80fd5b5f805f8060608587031215615600575f80fd5b843593506020850135615612816155e0565b9250604085013567ffffffffffffffff81111561562d575f80fd5b6156398782880161540b565b95989497509550505050565b5f60208284031215615655575f80fd5b5051919050565b600181811c9082168061567057607f821691505b602082108103613fb9577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f602082840312156156b7575f80fd5b815160ff81168114610e38575f80fd5b5f82601f8301126156d6575f80fd5b81516156e46150d482615090565b8181528460208386010111156156f8575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f60208284031215615724575f80fd5b815167ffffffffffffffff8082111561573b575f80fd5b908301906040828603121561574e575f80fd5b615756615013565b825161576181614f4d565b8152602083015182811115615774575f80fd5b929092019160808387031215615788575f80fd5b61579061503c565b835161579b81614f4d565b81526020840151838111156157ae575f80fd5b6157ba888287016156c7565b6020830152506040840151838111156157d1575f80fd5b6157dd888287016156c7565b604083015250606084015193506157f384614f4d565b60608101939093526020810192909252509392505050565b5f6001600160a01b038085168352604060208401528084511660408401526020840151604060608501528181511660808501526020810151608060a0860152615858610100860182614f7c565b905060408201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808683030160c08701526158938282614f7c565b9150508260608301511660e08601528093505050509392505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015283608083015260c060a08301526158ec60c0830184614f7c565b98975050505050505050565b602081526001600160a01b0382511660208201526020820151604082015260408201516060820152606082015160808201525f608083015160a080840152610e0f60c0840182614f7c565b6001600160a01b0384168152826020820152606060408201525f6126666060830184614f7c565b5f6001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261214c60a0830184614f7c565b602081526001600160a01b03825116602082015260208201516040820152604082015160608201525f6060830151608080840152610e0f60a0840182614f7c565b6001600160a01b0383168152604060208201525f610e0f6040830184614f7c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610ab457610ab4615a03565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615aa3575f80fd5b83018035915067ffffffffffffffff821115615abd575f80fd5b602001915036819003821315613186575f80fd5b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f815180845260208085019450602084015f5b83811015615b2357815187529582019590820190600101615b07565b509495945050505050565b602081525f6001600160a01b0380845116602084015280602085015116604084015250604083015160a06060840152615b6a60c0840182615af4565b90506060840151601f19848303016080850152615b878282615af4565b9150506080840151151560a08401528091505092915050565b6001600160a01b0386168152846020820152831515604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f19160101949350505050565b602081528151602082015260208201516040820152604082015160608201526060820151151560808201525f608083015160a080840152610e0f60c0840182614f7c565b80820180821115610ab457610ab4615a03565b5f60208284031215615c55575f80fd5b8151610e3881614f4d565b5f60208284031215615c70575f80fd5b8151610e38816155e0565b5f6001600160a01b03808a16835280891660208401528088166040840152508560608301528460808301528360a083015260e060c0830152615cc060e0830184614f7c565b9998505050505050505050565b5f6001600160a01b038083511684528060208401511660208501525060408201516040840152606082015160608401526080820151608084015260a082015160c060a0850152610e0f60c0850182614f7c565b602081525f610e386020830184615ccd565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b601f821115610cde57805f5260205f20601f840160051c81016020851015615db15750805b601f840160051c820191505b818110156128a5575f8155600101615dbd565b815167ffffffffffffffff811115615dea57615dea614fe6565b615dfe81615df8845461565c565b84615d8c565b602080601f831160018114615e31575f8415615e1a5750858301515b5f19600386901b1c1916600185901b178555613573565b5f85815260208120601f198616915b82811015615e5f57888601518255948401946001909101908401615e40565b5085821015615e7c57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60ff831680615e9e57615e9e615d5f565b8060ff84160691505092915050565b8082018281125f83128015821682158216171561203657612036615a03565b600181815b80851115615f0657815f1904821115615eec57615eec615a03565b80851615615ef957918102915b93841c9390800290615ed1565b509250929050565b5f82615f1c57506001610ab4565b81615f2857505f610ab4565b8160018114615f3e5760028114615f4857615f64565b6001915050610ab4565b60ff841115615f5957615f59615a03565b50506001821b610ab4565b5060208310610133831016604e8410600b8410161715615f87575081810a610ab4565b615f918383615ecc565b805f1904821115615fa457615fa4615a03565b029392505050565b5f610e388383615f0e565b5f82615fc557615fc5615d5f565b500490565b5f7f80000000000000000000000000000000000000000000000000000000000000008203614bb857614bb8615a0356"; + hex"608060405260043610610337575f3560e01c8063715018a6116101af578063bbec4d06116100eb578063dd62ed3e11610094578063e70689f51161006e578063e70689f51461098c578063f2fde38b146109ab578063f5647943146109ca578063f5d214f5146109ff5761033e565b8063dd62ed3e146108ce578063e1e6b89814610931578063e5be7d901461096d5761033e565b8063c77b66c2116100c5578063c77b66c214610894578063d09edf31146108a7578063db2088f4146108bb5761033e565b8063bbec4d0614610856578063c54cafee14610875578063c63d75b6146105445761033e565b80638da5cb5b11610158578063a9059cbb11610132578063a9059cbb14610799578063ac9650d8146107b8578063ae57de0c146107e4578063ae98b39f146108035761033e565b80638da5cb5b14610752578063921a4c421461076657806395d89b41146107855761033e565b80637a7af70d116101895780637a7af70d1461070157806381c3fcb91461071457806385b68756146107335761033e565b8063715018a6146106af578063770afee1146106c3578063786cd916146106e25761033e565b8063276b11401161027e5780634abe413711610227578063633ac71711610201578063633ac717146105ff5780636ba235211461061e5780636c876b941461067157806370a08231146106905761033e565b80634abe4137146105a257806356db02e8146105c157806359f89dda146105e05761033e565b8063402d267d11610258578063402d267d14610544578063439fab9114610564578063488bd7b0146105835761033e565b8063276b1140146104df578063313ce567146104f257806338d52e0f146105185761033e565b806318160ddd116102e05780631f6759d3116102ba5780631f6759d31461048d57806323b872dd146104a15780632755c6c7146104c05761033e565b806318160ddd1461043b578063181e7b3b1461044f5780631e4344a11461046e5761033e565b806306fdde031161031157806306fdde03146103e8578063095ea7b3146104095780631423feba146104285761033e565b806301e1d1141461037357806301ffc9a71461039a578063058a628f146103c95761033e565b3661033e57005b73ad6219d71ccf6904c0633e3a8a8c423f54036fd1365f80375f80365f845af43d5f803e80801561036d573d5ff35b3d5ffd5b005b34801561037e575f80fd5b50610387610a32565b6040519081526020015b60405180910390f35b3480156103a5575f80fd5b506103b96103b4366004614dd8565b610a40565b6040519015158152602001610391565b3480156103d4575f80fd5b506103716103e3366004614e13565b610a83565b3480156103f3575f80fd5b506103fc610cac565b6040516103919190614e5c565b348015610414575f80fd5b506103b9610423366004614e6e565b610d7f565b610387610436366004614fa2565b610d96565b348015610446575f80fd5b50610387610de0565b34801561045a575f80fd5b50610387610469366004615001565b610de9565b348015610479575f80fd5b50610371610488366004615021565b610e08565b348015610498575f80fd5b50610387610e94565b3480156104ac575f80fd5b506103b96104bb366004615038565b610ebf565b3480156104cb575f80fd5b506103716104da366004614e6e565b610ee2565b6103876104ed366004615001565b61101c565b3480156104fd575f80fd5b50610506611047565b60405160ff9091168152602001610391565b348015610523575f80fd5b5061052c6110ec565b6040516001600160a01b039091168152602001610391565b34801561054f575f80fd5b5061038761055e366004614e13565b505f1990565b34801561056f575f80fd5b5061038761057e366004615076565b611120565b34801561058e575f80fd5b5061038761059d366004615001565b611399565b3480156105ad575f80fd5b506103876105bc366004614e6e565b6113b1565b3480156105cc575f80fd5b506103876105db3660046150a8565b611452565b3480156105eb575f80fd5b506103716105fa3660046150ef565b611762565b34801561060a575f80fd5b50610371610619366004614e13565b61179a565b348015610629575f80fd5b50610387610638366004614e13565b6001600160a01b03165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be701602052604090205490565b34801561067c575f80fd5b5061037161068b366004614e13565b6118c7565b34801561069b575f80fd5b506103876106aa366004614e13565b6119c7565b3480156106ba575f80fd5b50610371611a10565b3480156106ce575f80fd5b506103876106dd3660046150ef565b611a23565b3480156106ed575f80fd5b506103716106fc366004614e6e565b611bdd565b61038761070f366004615001565b611d0e565b34801561071f575f80fd5b5061037161072e366004615076565b611d23565b34801561073e575f80fd5b5061038761074d366004614e6e565b611d5f565b34801561075d575f80fd5b5061052c611e29565b348015610771575f80fd5b50610387610780366004615144565b611e32565b348015610790575f80fd5b506103fc611e5f565b3480156107a4575f80fd5b506103b96107b3366004614e6e565b611eb0565b3480156107c3575f80fd5b506107d76107d23660046151b5565b611ebd565b6040516103919190615224565b3480156107ef575f80fd5b506103876107fe366004615144565b611fa3565b34801561080e575f80fd5b5061038761081d366004614e13565b6001600160a01b03165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be702602052604090205490565b348015610861575f80fd5b50610387610870366004615001565b611fc6565b348015610880575f80fd5b5061038761088f3660046152e2565b611fd4565b6103876108a2366004614fa2565b6120a3565b3480156108b2575f80fd5b5061052c6120d2565b6103876108c9366004615001565b6120fa565b3480156108d9575f80fd5b506103876108e8366004615347565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b34801561093c575f80fd5b507f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b031661052c565b348015610978575f80fd5b506103716109873660046153f0565b61210e565b348015610997575f80fd5b506103716109a6366004615486565b612245565b3480156109b6575f80fd5b506103716109c5366004614e13565b6123ae565b3480156109d5575f80fd5b507fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd025442116103b9565b348015610a0a575f80fd5b507fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0154610387565b5f610a3b610de0565b905090565b5f6001600160e01b031982167f59f89dda000000000000000000000000000000000000000000000000000000001480610a7d5750610a7d82612404565b92915050565b6040517f248a9ca30000000000000000000000000000000000000000000000000000000081527ffc0b9a47b723baf66339577301d13949cab2da29c3baeaa9cfc1f36c513e8f8960048201525f906001600160a01b0383169063248a9ca390602401602060405180830381865afa158015610b00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2491906154de565b905080610b93576040517f76728ed90000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201527ffc0b9a47b723baf66339577301d13949cab2da29c3baeaa9cfc1f36c513e8f8960248201526044015b60405180910390fd5b6040517f248a9ca30000000000000000000000000000000000000000000000000000000081527f921a3c774c4abecc1bddc4f7beb397fdb2cde7806021d9571086abb74cd023e760048201525f906001600160a01b0384169063248a9ca390602401602060405180830381865afa158015610c10573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3491906154de565b905080610c9e576040517f76728ed90000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527f921a3c774c4abecc1bddc4f7beb397fdb2cde7806021d9571086abb74cd023e76024820152604401610b8a565b610ca7836124d2565b505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091610cfd906154f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d29906154f5565b8015610d745780601f10610d4b57610100808354040283529160200191610d74565b820191905f5260205f20905b815481529060010190602001808311610d5757829003601f168201915b505050505091505090565b5f33610d8c8185856124e3565b5060019392505050565b5f80610da06124f0565b90505f610dba87610db4335b89865f612547565b8761255b565b9050610dc98787838588612571565b610dd4335b4761277f565b9150505b949350505050565b5f610a3b612828565b5f610e0183670de0b6b3a7640000612987565b612987565b9392505050565b610e10612993565b7f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be7008054821115610e3e578181555b7fff9fd4facd8bd30d905cc7ffbd03e8829a414df4c6554d155d132c3377868a42610e67611e29565b8254604080516001600160a01b039093168352602083018690528201526060015b60405180910390a15050565b5f807f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be7005b5492915050565b5f33610ecc8582856129de565b610ed7858585612a92565b506001949350505050565b610eea612993565b805f03610f2e576040517f5a6084530000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b8a565b6001600160a01b0382165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70260205260409020547f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70090821115610fab576001600160a01b0383165f90815260028201602052604090208290555b7fa1e5b368dc99c8558f28b1e7e8cb7ab542c989a4b697628ba7bfffe0aeaccffd610fd4611e29565b6001600160a01b038581165f818152600286016020908152604091829020548251959094168552840191909152820185905260608201526080015b60405180910390a1505050565b5f8061103c84611036335b336110306124f0565b5f612547565b85612b21565b9050610e0133610dce565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f308970152310243260080545f91906001600160a01b0316803b806110845760126110e4565b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e49190615527565b935050505090565b5f807f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f30897015231024326005b546001600160a01b031692915050565b5f8061112a612b38565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156111565750825b90505f8267ffffffffffffffff1660011480156111725750303b155b905081158015611180575080155b156111b7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561120257845468ff00000000000000001916680100000000000000001785555b61120a612b60565b5f8780602001905181019061121f9190615594565b905061122e8160200151612b99565b6020810151516001600160a01b031615611274576040517f8951799200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516001600160a01b03166112b5576040517fd264eed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112be30612d01565b80516112c990612e56565b7ffa89761502e992c8c755fba778ced00f4562485023f656906eb76f5dd65a9fe53360408051808201825284516001600160a01b0316815260208086015190820152905161131892919061568b565b60405180910390a17fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc3965050831561138f57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050919050565b5f610e01836113ac335b33866001612547565b612ed3565b5f6113e37f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b031690565b604051627eeac760e11b81526001600160a01b03858116600483015260248201859052919091169062fdd58e90604401602060405180830381865afa15801561142e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0191906154de565b5f61145b612ee0565b825f03611494576040517f312497b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61153f846114ca7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b031690565b604051627eeac760e11b81526001600160a01b038a81166004830152602482018a9052919091169062fdd58e90604401602060405180830381865afa158015611515573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061153991906154de565b90612f0e565b90508015611644577f88e2280ece62e9296d3578b77647db2c11f9fa7e42578e2db5d4262123ffae3e3387878785886040516115809695949392919061572f565b60405180910390a17f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b03166001600160a01b031663043fa98733883360405160e085901b6001600160e01b03191681526001600160a01b03938416600482015291831660248301529091166044820152606481018890526084810184905260c060a48201525f60c482015260e4015f604051808303815f87803b15801561162d575f80fd5b505af115801561163f573d5f803e3d5ffd5b505050505b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f3dd35eca0ca8a128757fa464a5dfa4ad6cc4853cad96dce4e90fdbea4f0a52e36040518060a001604052808c6001600160a01b031681526020018b81526020018a8152602001878152602001898152506040516020016116db9190615778565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401611708939291906157c3565b5f604051808303815f87803b15801561171f575f80fd5b505af1158015611731573d5f803e3d5ffd5b5093945050505050610dd860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b8282826040517f3ae4063b000000000000000000000000000000000000000000000000000000008152600401610b8a939291906157c3565b6117a2612993565b6001600160a01b0381165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70260205260409020547f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be700904211611857576001600160a01b0382165f818152600283016020526040908190205490517f81a7897700000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610b8a565b6001600160a01b0382165f9081526002820160205260408120557fa1e5b368dc99c8558f28b1e7e8cb7ab542c989a4b697628ba7bfffe0aeaccffd61189a611e29565b604080516001600160a01b03928316815291851660208301525f9082018190526060820152608001610e88565b6118cf612993565b6001600160a01b0381165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70160205260409020547f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be700904211611984576001600160a01b0382165f818152600183016020526040908190205490517ff1b01b5400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610b8a565b6001600160a01b0382165f9081526001820160205260408120557fd08871fffa9d03c01fcba597af5dfbe64cb26f207debdae1af2532695447499161189a611e29565b5f806119d283612f1d565b90505f6119dd612f30565b6001600160a01b0385165f90815260038201602052604081205491925090611a06908490612f91565b5095945050505050565b611a18612993565b611a215f612e56565b565b5f611a2c612ee0565b825f03611a65576040517f312497b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611a7384611539876119c7565b90508015611ac5577f3fc1c49e72362e91416388fe7a107b92db924642476e83e701eeeb6256d7249e3386868487604051611ab29594939291906157ea565b60405180910390a1611ac5853383612a92565b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f54f0af3716c79b30b8c228679d31d77a1a5f526c16af3262730e0a8de4363fed60405180608001604052808b6001600160a01b031681526020018a815260200187815260200189815250604051602001611b569190615821565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401611b83939291906157c3565b5f604051808303815f87803b158015611b9a575f80fd5b505af1158015611bac573d5f803e3d5ffd5b5093945050505050610e0160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611be5612993565b805f03611c29576040517ffd86061b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b8a565b6001600160a01b0382165f9081527f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70160205260409020547f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be70090821115611ca6576001600160a01b0383165f90815260018201602052604090208290555b7fd08871fffa9d03c01fcba597af5dfbe64cb26f207debdae1af25326954474991611ccf611e29565b6001600160a01b038581165f8181526001860160209081526040918290205482519590941685528401919091528201859052606082015260800161100f565b5f8061103c84611d1d33611027565b8561255b565b7fdaffad82f53a38a62340f14cdd6fd3b437c5dcda6b32029dac1e661dbce28b2d3382604051611d54929190615862565b60405180910390a150565b5f80611d6e8485856001612547565b9050805f03611d80575f915050610a7d565b610dd8611db47f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b031690565b604051627eeac760e11b81526001600160a01b03878116600483015260248201879052919091169062fdd58e90604401602060405180830381865afa158015611dff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e2391906154de565b82612987565b5f610a3b61303f565b5f80611e4587610dfc8789886001612547565b9050611e558187878a8888613067565b9695505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091610cfd906154f5565b5f33610d8c818585612a92565b604080515f8152602081019091526060908267ffffffffffffffff811115611ee757611ee7614e98565b604051908082528060200260200182016040528015611f1a57816020015b6060815260200190600190039081611f055790505b5091505f5b83811015611f9b57611f7630868684818110611f3d57611f3d6158aa565b9050602002810190611f4f91906158be565b85604051602001611f629392919061591f565b6040516020818303038152906040526133fc565b838281518110611f8857611f886158aa565b6020908102919091010152600101611f1f565b505092915050565b5f80611fb6876113ac8789886001612547565b9050611e55878787848888613067565b5f610e0183610dfc336113a3565b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd01545f907fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd009085111561203d5760405163725238c160e11b815260048101869052602401610b8a565b5f6120548861204e338a8a5f612547565b5f61255b565b90506120988888838989898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061257192505050565b979650505050505050565b5f806120ad6124f0565b90505f6120c3876120bd33610dac565b87612b21565b9050610dc98187898588612571565b5f807fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd00611110565b5f8061103c84670de0b6b3a764000061204e565b61211b8585858585613497565b61212584846134fa565b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080546040805160a0810182526001600160a01b0388811682528781166020830152918101869052606081018590529116906359f89dda9088907f0e5bce7997400ea2056cf00fe99ca5d6be40bdb9d8b4e41217fe8670c2639a4890608081016121cf7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0254421190565b151590526040516121e3919060200161597c565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401612210939291906157c3565b5f604051808303815f87803b158015612227575f80fd5b505af1158015612239573d5f803e3d5ffd5b50505050505050505050565b835f0361227e576040517f8672985d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0090505f6040518060a001604052808360020154815260200183600201548152602001878152602001861515815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250905084806123185750816002015486115b1561232c5760028201869055602081018690525b7f7ef5cae78e9bd364afb19bb0f8a881a6d156e35a119e28c0d17524e50795815833878787876040516123639594939291906159ee565b60405180910390a181546001600160a01b03166359f89dda337f50a07cb25d0d864370863300b20987dfdae089abad71b607faf639d09d053391846040516020016121e39190615a3c565b6123b6612993565b6001600160a01b0381166123f8576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610b8a565b61240181612e56565b50565b5f6001600160e01b031982167fe5be7d9000000000000000000000000000000000000000000000000000000000148061246657506001600160e01b031982167f439fab9100000000000000000000000000000000000000000000000000000000145b8061249a57506001600160e01b031982167fe1e6b89800000000000000000000000000000000000000000000000000000000145b80610a7d57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0319831614610a7d565b6124da612993565b61240181612d01565b610ca783838360016135ba565b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd01545f907fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0090612541906001615a80565b91505090565b5f670de0b6b3a76400005b95945050505050565b5f61256682846136e2565b610dd884845f613726565b612579612ee0565b845f036125b2576040517fc7838b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f036125eb576040517ffc8c806300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841661262b576040517f6ba9ecd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f0361264d5760405163725238c160e11b81525f6004820152602401610b8a565b7f3377bcbed49a0c0005e53931cd8fe7334b5371523e5de784c0d0d3d01089cfea3385878686866040516126869695949392919061572f565b60405180910390a161269b858585858561373b565b6126a58484613796565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546040517f6d5b3f780000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690636d5b3f789061271590339088908790899088906004016157ea565b5f604051808303815f87803b15801561272c575f80fd5b505af115801561273e573d5f803e3d5ffd5b5050505061274f85858585856137e3565b61277860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b804710156127c2576040517fcf47918100000000000000000000000000000000000000000000000000000000815247600482015260248101829052604401610b8a565b6127db828260405180602001604052805f81525061388f565b156127e4575050565b3d156127f6576127f26138a4565b5050565b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80612832612f30565b60028101549091505f03612848576125416138af565b5f6128575f1960036001613915565b90505f5b5f198214610e01575f836002018381548110612879576128796158aa565b905f5260205f2090600502015f0154905060028103612956575f6129468560020185815481106128ab576128ab6158aa565b905f5260205f20906005020160040180546128c5906154f5565b80601f01602080910402602001604051908101604052809291908181526020018280546128f1906154f5565b801561293c5780601f106129135761010080835404028352916020019161293c565b820191905f5260205f20905b81548152906001019060200180831161291f57829003601f168201915b5050505050613a10565b90506129528382613a25565b9250505b5f8381526004850160205260409020546129709083615a80565b915061297f8360036001613915565b92505061285b565b5f610e01838383613aa9565b3361299c611e29565b6001600160a01b031614611a21576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610b8a565b6001600160a01b038381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160209081526040808320938616835292905220545f19811015612a8c5781811015612a7e576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401610b8a565b612a8c84848484035f6135ba565b50505050565b6001600160a01b038316612ad4576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610b8a565b6001600160a01b038216612b16576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610b8a565b610ca7838383613abe565b5f612b2c82846136e2565b610dd884846001613aa9565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610a7d565b425f03611a21576040517f789a532d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ba1613b11565b612bb381602001518260400151613b19565b80517f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432600805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b0393841617825560608401517f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601805490921693169283179055604080517f481c6a75000000000000000000000000000000000000000000000000000000008152905191925f92909163481c6a759160048083019260209291908290030181865afa158015612c88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cac9190615a93565b90506001600160a01b0381163014610ca7576040517f7935475e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0382166024820152604401610b8a565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f59f89dda0000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015612d7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612da09190615aae565b612dd6576040517ffd12061600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd00805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03831690811782556040805133815260208101929092527fa8c713fe8fb360697fc0daab836d85208a605d485fbc265aea0f773fc6cdd71a9101610e88565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f610e0183836001613726565b612ee8613b2b565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f828218828410028218610e01565b5f80612f2883613b86565b549392505050565b5f8060ff19612f6060017f2f8f8ecf1b7a1a3ceda8d15a9a2247a2377b3434535a87f1728021c13fec2e71615897565b604051602001612f7291815260200190565b60408051601f1981840301815291905280516020909101201692915050565b5f808281612f9d612f30565b9050855f612fae8760036001613915565b90505b5f198114613030579250828115801590612fee57506002836002018281548110612fdd57612fdd6158aa565b905f5260205f2090600502015f0154145b1561301c575f61300c8460020183815481106128ab576128ab6158aa565b90506130188382613a25565b9250505b6130298160036001613915565b9050612fb1565b509350909150505b9250929050565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300611110565b61306f612ee0565b855f036130a8576040517fc7838b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825f036130e1576040517ffc8c806300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516613121576040517f6ba9ecd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416613161576040517f9905827b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f036131845760405163725238c160e11b815260048101839052602401610b8a565b7f2845b9458bcc357e1abfe8de7f6832dfe7220596a053496b33d0deb6577d8d2a338686898787876040516131bf9796959493929190615ac9565b60405180910390a16001600160a01b0384163314613316576131e28433856129de565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b03166001600160a01b031663e985e9c585336040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613266573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061328a9190615aae565b613316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201527f6572206f7220617070726f7665640000000000000000000000000000000000006064820152608401610b8a565b6133208484613bf3565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546040517fc2530e390000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c2530e399061339090339088908790899088906004016157ea565b5f604051808303815f87803b1580156133a7575f80fd5b505af11580156133b9573d5f803e3d5ffd5b505050506133cb868686868686613c40565b6133f460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60605f6134098484613d49565b905080801561342a57505f3d118061342a57505f846001600160a01b03163b115b1561343f57613437613d5c565b915050610a7d565b8015613482576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610b8a565b3d156127f6576134906138a4565b5092915050565b7f8d198d032a58038629cc32dfaad5ea74a8e78fabf390f3089701523102432601546001600160a01b03163314612778576040517f8813aac300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f04485615b1da6633eec3daf54aadca2a89ef8b155744e223a046f4a6e38be7008054421180159061354357506001600160a01b0383165f908152600182016020526040902054155b801561356657506001600160a01b0382165f908152600282016020526040902054155b15610ca75780546040517f79d7155100000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03808516602483015283166044820152606401610b8a565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b03851661361d576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610b8a565b6001600160a01b03841661365f576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610b8a565b6001600160a01b038086165f9081526001830160209081526040808320938816835292905220839055811561277857836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516136d391815260200190565b60405180910390a35050505050565b818110156127f2576040517fa3e322340000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610b8a565b5f610dd88484670de0b6b3a764000085613d75565b7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd01547fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd00906137899084613db7565b6001909101555050505050565b6001600160a01b0382166137d8576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610b8a565b6127f25f8383613abe565b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f87a7811f4bfedea3d341ad165680ae306b01aaeacc205d227629cf157dd9f8216040518060c0016040528061384c3390565b6001600160a01b031681526020018a6001600160a01b031681526020018881526020018b8152602001898152602001878152506040516020016121e39190615b6e565b5f805f83516020850186885af1949350505050565b6040513d5f823e3d81fd5b5f8060ff196138df60017fb750591399365444a618527b69a54ce09476c8bde1ecff60f5aa1fe2b52605ff615897565b6040516020016138f191815260200190565b60408051601f198184030181529190528051602090910120610eb891166002615a80565b5f600783168103613952576040517fbf3cad0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61395b612f30565b60028101549091505f03613973575f19915050610e01565b5f5f1986146139a657816002018681548110613991576139916158aa565b905f5260205f209060050201600301546139a9565b81545b905060028460028111156139bf576139bf615b80565b036139e1576139d8826139d28484613dc6565b87613e41565b92505050610e01565b60018460028111156139f5576139f5615b80565b03613a05576139d8828287613e99565b611e55828287613e41565b5f81806020019051810190610a7d91906154de565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115613a83576040517fbf463fe900000000000000000000000000000000000000000000000000000000815260048101849052602401610b8a565b5f613aa0613a9a613a94865f613f06565b85613f60565b5f613fc2565b50949350505050565b5f610dd884670de0b6b3a76400008585613d75565b613ac6614003565b613acf83614069565b613ad882614069565b613ae3838383614160565b6001600160a01b038316613afa57610ca7816142c0565b6001600160a01b038216610ca757610ca781614303565b611a2161433d565b613b2161433d565b6127f2828261437b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054600203611a21576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8060ff19613bb660017fb750591399365444a618527b69a54ce09476c8bde1ecff60f5aa1fe2b52605ff615897565b604051602001613bc891815260200190565b60408051601f1981840301815291815281516020928301205f96875292909216905290922092915050565b6001600160a01b038216613c35576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610b8a565b6127f2825f83613abe565b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f7a8dc26796a1e50e6e190b70259f58f6a4edd5b22280ceecc82b687b8e9828696040518060c001604052808a6001600160a01b031681526020018b6001600160a01b031681526020018881526020018c815260200189815260200187815250604051602001613ce69190615b6e565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401613d13939291906157c3565b5f604051808303815f87803b158015613d2a575f80fd5b505af1158015613d3c573d5f803e3d5ffd5b5050505050505050505050565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b5f613da2613d82836143de565b8015613d9d57505f8480613d9857613d98615b94565b868809115b151590565b613dad86868661440a565b6125529190615a80565b5f828218828411028218610e01565b5f5b5f198214158015613e0a575042836002018381548110613dea57613dea6158aa565b5f91825260209091206001600590920201015467ffffffffffffffff1611155b15613e3b57826002018281548110613e2457613e246158aa565b905f5260205f209060050201600301549150613dc8565b50919050565b5f5b5f198314613e8f575f846002018481548110613e6157613e616158aa565b905f5260205f209060050201905082815f0154165f14613e845783915050610e01565b600301549250613e43565b505f199392505050565b5f5b5f198314613e8f575f846002018481548110613eb957613eb96158aa565b5f918252602090912060059091020160018101549091504267ffffffffffffffff9091161115613ee95750613e8f565b8054831615613efb5783915050610e01565b600301549250613e9b565b5f805f613f1385856144ba565b9150915080613f58576040517f22c9f7bb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610b8a565b509392505050565b5f7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116601b90810b9160e086811d9291861690910b9085901d8480613fa5868686866145c0565b915091505f613fb483836146df565b9a9950505050505050505050565b5f807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416601b0b60e085901d613ff682828761473d565b9350935050509250929050565b5f61400c612f30565b60028101549091505f0361401d5750565b5f614032826005015460026001176001613915565b90505f195b5f19821461405557508061404e8160036001613915565b9150614037565b5f198114610ca75760058301819055505050565b6001600160a01b03811661407a5750565b5f614083612f30565b6001600160a01b0383165f9081526003820160205260408120549192506140a984612f1d565b90505f806140b78385612f91565b915091508381036140ca57505050505050565b6001600160a01b0386165f9081526003860160205260409020819055818314614101576140f78683614928565b614101838361493a565b6040805185815260208101839052908101849052606081018390526001600160a01b038716907f36a2eb39b73568d38e98721588b15b309c9380e1b1ab575c2c3d71d5148ccb4a9060800160405180910390a26133f484848385614960565b61416a83836134fa565b5f7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0080549091506001600160a01b03166359f89dda337f55387ad71a8e46cc1293406722dd825c028eaf5ff0c2a3e4f176184d62e9d30a6040518060800160405280896001600160a01b03168152602001886001600160a01b0316815260200187815260200161421a7fba9f160a0257aef2aa878e698d5363429ea67cc3c427f23f7cb9c3069b67bd0254421190565b151590526040805182516001600160a01b03908116602080840191909152840151168183015290820151606080830191909152909101511515608082015260a0016040516020818303038152906040526040518463ffffffff1660e01b8152600401614288939291906157c3565b5f604051808303815f87803b15801561429f575f80fd5b505af11580156142b1573d5f803e3d5ffd5b50505050612a8c8484846149bd565b5f6142c9612f30565b6002810154909150156127f25760058101545f908152600482016020526040812080548492906142fa908490615a80565b90915550505050565b5f61430c612f30565b6002810154909150156127f25760058101545f908152600482016020526040812080548492906142fa908490615897565b6143456149c8565b611a21576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61438361433d565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036143cf8482615bec565b5060048101612a8c8382615bec565b5f60028260038111156143f3576143f3615b80565b6143fd9190615ca8565b60ff166001149050919050565b5f805f61441786866149e6565b91509150815f0361443b5783818161443157614431615b94565b0492505050610e01565b818411614452576144526003851502601118614a02565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f601b83900b831483838261451e577d90e40fbeea1d3a4abc8955e946fe31cdcf66f634e10000000000000000008605156144fe57620186a0860595506005850194505b8586601b0b1461451957600a860595508460010194506144fe565b614534565b855f0361453457505f9250600191506130389050565b848560030b14614590575f85121561455457505f92508291506130389050565b6040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610b8a565b50507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1791509250929050565b5f80851584151780156145d8575f92505f91506146d5565b6145e28487615cc9565b91505f6145ee88614a13565b90505f6145fa87614a13565b90505f61460783836149e6565b5090505f6f0785ee10d5da46d900f436a00000000082111561463c576f0785ee10d5da46d900f436a000000000820491506025015b670de0b6b3a764000082111561465d57670de0b6b3a7640000820491506012015b633b9aca0082111561467657633b9aca00820491506009015b61271082111561468b57612710820491506004015b811561469f57600a8204915060010161468b565b6146a98187615cc9565b95506146cb8b8a6146c587876146c087600a615dc8565b614a3c565b89614b17565b9097509550505050505b5094509492505050565b5f805f6146ec85856144ba565b91509150801580156146fc575081155b15613f58576040517f8eba4d070000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610b8a565b5f805f851215614783576040517f4a7d166b0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610b8a565b845f0361479557505f90506001614920565b8460ff84168501858112156147e0576040517fd556b1110000000000000000000000000000000000000000000000000000000081526004810188905260248101879052604401610b8a565b5f805f83121561484a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3831215614821575f809550955050505050614920565b825f03600a0a915081848161483857614838615b94565b04955050840290911491506149209050565b5f83131561491557604d8313156148a0576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610b8a565b82600a0a9150815f19816148b6576148b6615b94565b04841115614903576040517fc849483b000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260ff88166044820152606401610b8a565b50919091029250600191506149209050565b509193506001925050505b935093915050565b5f61493283613b86565b919091555050565b6127f282826149476138af565b6149519190615a80565b61495b9190615897565b614c07565b5f614969612f30565b905083816004015f8781526020019081526020015f205f82825461498d9190615897565b90915550505f838152600482016020526040812080548492906149b1908490615a80565b90915550505050505050565b610ca7838383614c73565b5f6149d1612b38565b5468010000000000000000900460ff16919050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f80821215614a3857600160ff1b8203614a325750600160ff1b919050565b505f0390565b5090565b5f805f614a4986866149e6565b91509150815f03614a635783818161443157614431615b94565b838210614aad576040517f6c59da12000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610b8a565b5f84868809600186198101871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103025f82900382900490920185841190960395909502919093039390930492909217029150509392505050565b5f805f8587181215614bc5577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614bb257614b767f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001615a80565b8403614b8a5750600160ff1b905081614bfe565b614b95600a85615dd3565b614b9e90615de6565b614ba9846001615cc9565b91509150614bfe565b614bbb84615de6565b8391509150614bfe565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115614bf857614b9e600a85615dd3565b50829050815b94509492505050565b5f60ff19614c3660017fb750591399365444a618527b69a54ce09476c8bde1ecff60f5aa1fe2b52605ff615897565b604051602001614c4891815260200190565b60408051601f198184030181529190528051602090910120614c6c91166002615a80565b9190915550565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038416614cc05781816002015f828254614cb59190615a80565b90915550614d499050565b6001600160a01b0384165f9081526020829052604090205482811015614d2b576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810182905260448101849052606401610b8a565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316614d67576002810180548390039055614d85565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051614dca91815260200190565b60405180910390a350505050565b5f60208284031215614de8575f80fd5b81356001600160e01b031981168114610e01575f80fd5b6001600160a01b0381168114612401575f80fd5b5f60208284031215614e23575f80fd5b8135610e0181614dff565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610e016020830184614e2e565b5f8060408385031215614e7f575f80fd5b8235614e8a81614dff565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff81118282101715614ecf57614ecf614e98565b60405290565b6040516080810167ffffffffffffffff81118282101715614ecf57614ecf614e98565b604051601f8201601f1916810167ffffffffffffffff81118282101715614f2157614f21614e98565b604052919050565b5f67ffffffffffffffff821115614f4257614f42614e98565b50601f01601f191660200190565b5f82601f830112614f5f575f80fd5b8135614f72614f6d82614f29565b614ef8565b818152846020838601011115614f86575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215614fb5575f80fd5b843593506020850135614fc781614dff565b925060408501359150606085013567ffffffffffffffff811115614fe9575f80fd5b614ff587828801614f50565b91505092959194509250565b5f8060408385031215615012575f80fd5b50508035926020909101359150565b5f60208284031215615031575f80fd5b5035919050565b5f805f6060848603121561504a575f80fd5b833561505581614dff565b9250602084013561506581614dff565b929592945050506040919091013590565b5f60208284031215615086575f80fd5b813567ffffffffffffffff81111561509c575f80fd5b610dd884828501614f50565b5f805f80608085870312156150bb575f80fd5b84356150c681614dff565b93506020850135925060408501359150606085013567ffffffffffffffff811115614fe9575f80fd5b5f805f60608486031215615101575f80fd5b833561510c81614dff565b925060208401359150604084013567ffffffffffffffff81111561512e575f80fd5b61513a86828701614f50565b9150509250925092565b5f805f805f60a08688031215615158575f80fd5b85359450602086013561516a81614dff565b9350604086013561517a81614dff565b925060608601359150608086013567ffffffffffffffff81111561519c575f80fd5b6151a888828901614f50565b9150509295509295909350565b5f80602083850312156151c6575f80fd5b823567ffffffffffffffff808211156151dd575f80fd5b818501915085601f8301126151f0575f80fd5b8135818111156151fe575f80fd5b8660208260051b8501011115615212575f80fd5b60209290920196919550909350505050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015615297577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452615285858351614e2e565b9450928501929085019060010161524b565b5092979650505050505050565b5f8083601f8401126152b4575f80fd5b50813567ffffffffffffffff8111156152cb575f80fd5b602083019150836020828501011115613038575f80fd5b5f805f805f608086880312156152f6575f80fd5b85359450602086013561530881614dff565b935060408601359250606086013567ffffffffffffffff81111561532a575f80fd5b615336888289016152a4565b969995985093965092949392505050565b5f8060408385031215615358575f80fd5b823561536381614dff565b9150602083013561537381614dff565b809150509250929050565b5f82601f83011261538d575f80fd5b8135602067ffffffffffffffff8211156153a9576153a9614e98565b8160051b6153b8828201614ef8565b92835284810182019282810190878511156153d1575f80fd5b83870192505b84831015612098578235825291830191908301906153d7565b5f805f805f60a08688031215615404575f80fd5b853561540f81614dff565b9450602086013561541f81614dff565b9350604086013561542f81614dff565b9250606086013567ffffffffffffffff8082111561544b575f80fd5b61545789838a0161537e565b9350608088013591508082111561546c575f80fd5b506151a88882890161537e565b8015158114612401575f80fd5b5f805f8060608587031215615499575f80fd5b8435935060208501356154ab81615479565b9250604085013567ffffffffffffffff8111156154c6575f80fd5b6154d2878288016152a4565b95989497509550505050565b5f602082840312156154ee575f80fd5b5051919050565b600181811c9082168061550957607f821691505b602082108103613e3b57634e487b7160e01b5f52602260045260245ffd5b5f60208284031215615537575f80fd5b815160ff81168114610e01575f80fd5b5f82601f830112615556575f80fd5b8151615564614f6d82614f29565b818152846020838601011115615578575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f602082840312156155a4575f80fd5b815167ffffffffffffffff808211156155bb575f80fd5b90830190604082860312156155ce575f80fd5b6155d6614eac565b82516155e181614dff565b81526020830151828111156155f4575f80fd5b929092019160808387031215615608575f80fd5b615610614ed5565b835161561b81614dff565b815260208401518381111561562e575f80fd5b61563a88828701615547565b602083015250604084015183811115615651575f80fd5b61565d88828701615547565b6040830152506060840151935061567384614dff565b60608101939093526020810192909252509392505050565b5f6001600160a01b038085168352604060208401528084511660408401526020840151604060608501528181511660808501526020810151608060a08601526156d8610100860182614e2e565b905060408201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808683030160c08701526157138282614e2e565b9150508260608301511660e08601528093505050509392505050565b5f6001600160a01b03808916835280881660208401525085604083015284606083015283608083015260c060a083015261576c60c0830184614e2e565b98975050505050505050565b602081526001600160a01b0382511660208201526020820151604082015260408201516060820152606082015160808201525f608083015160a080840152610dd860c0840182614e2e565b6001600160a01b0384168152826020820152606060408201525f6125526060830184614e2e565b5f6001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261209860a0830184614e2e565b602081526001600160a01b03825116602082015260208201516040820152604082015160608201525f6060830151608080840152610dd860a0840182614e2e565b6001600160a01b0383168152604060208201525f610dd86040830184614e2e565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610a7d57610a7d615883565b634e487b7160e01b5f52603260045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158f1575f80fd5b83018035915067ffffffffffffffff82111561590b575f80fd5b602001915036819003821315613038575f80fd5b828482375f8382015f815283518060208601835e5f910190815295945050505050565b5f815180845260208085019450602084015f5b8381101561597157815187529582019590820190600101615955565b509495945050505050565b602081525f6001600160a01b0380845116602084015280602085015116604084015250604083015160a060608401526159b860c0840182615942565b90506060840151601f198483030160808501526159d58282615942565b9150506080840151151560a08401528091505092915050565b6001600160a01b0386168152846020820152831515604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f19160101949350505050565b602081528151602082015260208201516040820152604082015160608201526060820151151560808201525f608083015160a080840152610dd860c0840182614e2e565b80820180821115610a7d57610a7d615883565b5f60208284031215615aa3575f80fd5b8151610e0181614dff565b5f60208284031215615abe575f80fd5b8151610e0181615479565b5f6001600160a01b03808a16835280891660208401528088166040840152508560608301528460808301528360a083015260e060c0830152615b0e60e0830184614e2e565b9998505050505050505050565b5f6001600160a01b038083511684528060208401511660208501525060408201516040840152606082015160608401526080820151608084015260a082015160c060a0850152610dd860c0850182614e2e565b602081525f610e016020830184615b1b565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b601f821115610ca757805f5260205f20601f840160051c81016020851015615bcd5750805b601f840160051c820191505b81811015612778575f8155600101615bd9565b815167ffffffffffffffff811115615c0657615c06614e98565b615c1a81615c1484546154f5565b84615ba8565b602080601f831160018114615c4d575f8415615c365750858301515b5f19600386901b1c1916600185901b1785556133f4565b5f85815260208120601f198616915b82811015615c7b57888601518255948401946001909101908401615c5c565b5085821015615c9857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60ff831680615cba57615cba615b94565b8060ff84160691505092915050565b8082018281125f831280158216821582161715611f9b57611f9b615883565b600181815b80851115615d2257815f1904821115615d0857615d08615883565b80851615615d1557918102915b93841c9390800290615ced565b509250929050565b5f82615d3857506001610a7d565b81615d4457505f610a7d565b8160018114615d5a5760028114615d6457615d80565b6001915050610a7d565b60ff841115615d7557615d75615883565b50506001821b610a7d565b5060208310610133831016604e8410600b8410161715615da3575081810a610a7d565b615dad8383615ce8565b805f1904821115615dc057615dc0615883565b029392505050565b5f610e018383615d2a565b5f82615de157615de1615b94565b500490565b5f600160ff1b8203614a3257614a3261588356"; diff --git a/src/generated/candidate/StoxUnifiedDeployer.pointers.sol b/src/generated/candidate/StoxUnifiedDeployer.pointers.sol index 3819204f..61f4edc1 100644 --- a/src/generated/candidate/StoxUnifiedDeployer.pointers.sol +++ b/src/generated/candidate/StoxUnifiedDeployer.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x76b90443c401cb2071b31fbf0596f931e01315c358b9db4e4db998107dc2e62c); +bytes32 constant BYTECODE_HASH = bytes32(0x06734b6141e3a532330865d49f77f822c289983d9242636aef6e35e7d8e8195e); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x48E1A9091E89f5500AfC9d42FBB85bE8b4f70203); +address constant DEPLOYED_ADDRESS = address(0x118010c9e57806368AE5A0AAc50A01E715c54ed2); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b506106308061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806301ffc9a714610038578063733e1f8d1461005f575b5f80fd5b61004b6100463660046102a3565b610074565b604051901515815260200160405180910390f35b61007261006d36600461042d565b61010c565b005b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f733e1f8d00000000000000000000000000000000000000000000000000000000148061010657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040517f4904fab30000000000000000000000000000000000000000000000000000000081525f9073679ab223dab158ea93e1a4f49104de436c58eab890634904fab39061015e908590600401610570565b6020604051808303815f875af115801561017a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061019e9190610615565b6040517fd786858b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201529091505f90736b4232f1046f1f1bb99a1184d886bbaf3cd7e15a9063d786858b906024016020604051808303815f875af1158015610220573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102449190610615565b6040805133815273ffffffffffffffffffffffffffffffffffffffff858116602083015283168183015290519192507fa0d99d93cf7a5f89661fa0829369a7e4896e755871efe65440bab2429387d55b919081900360600190a1505050565b5f602082840312156102b3575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146102e2575f80fd5b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff81118282101715610339576103396102e9565b60405290565b6040516080810167ffffffffffffffff81118282101715610339576103396102e9565b73ffffffffffffffffffffffffffffffffffffffff81168114610383575f80fd5b50565b5f82601f830112610395575f80fd5b813567ffffffffffffffff808211156103b0576103b06102e9565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156103f6576103f66102e9565b8160405283815286602085880101111561040e575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f6020828403121561043d575f80fd5b813567ffffffffffffffff80821115610454575f80fd5b9083019060408286031215610467575f80fd5b61046f610316565b823561047a81610362565b815260208301358281111561048d575f80fd5b9290920191608083870312156104a1575f80fd5b6104a961033f565b83356104b481610362565b81526020840135838111156104c7575f80fd5b6104d388828701610386565b6020830152506040840135838111156104ea575f80fd5b6104f688828701610386565b6040830152506060840135935061050c84610362565b60608101939093526020810192909252509392505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f73ffffffffffffffffffffffffffffffffffffffff808451166020840152602084015160408085015281815116606085015260208101516080808601526105bf60e0860182610524565b905060408201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08683030160a08701526105fa8282610524565b9150508260608301511660c086015280935050505092915050565b5f60208284031215610625575f80fd5b81516102e28161036256"; + hex"6080604052348015600e575f80fd5b506105f48061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806301ffc9a714610038578063733e1f8d1461005f575b5f80fd5b61004b6100463660046102a3565b610074565b604051901515815260200160405180910390f35b61007261006d36600461040f565b61010c565b005b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f733e1f8d00000000000000000000000000000000000000000000000000000000148061010657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040517f4904fab30000000000000000000000000000000000000000000000000000000081525f907359afe8ae48de65d9916b99c8cf9977061955c9a790634904fab39061015e908590600401610534565b6020604051808303815f875af115801561017a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061019e91906105d9565b6040517fd786858b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201529091505f9073d0395427938c83d5ac663be80147ff149ace98e79063d786858b906024016020604051808303815f875af1158015610220573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061024491906105d9565b6040805133815273ffffffffffffffffffffffffffffffffffffffff858116602083015283168183015290519192507fa0d99d93cf7a5f89661fa0829369a7e4896e755871efe65440bab2429387d55b919081900360600190a1505050565b5f602082840312156102b3575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146102e2575f80fd5b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff81118282101715610339576103396102e9565b60405290565b6040516080810167ffffffffffffffff81118282101715610339576103396102e9565b73ffffffffffffffffffffffffffffffffffffffff81168114610383575f80fd5b50565b5f82601f830112610395575f80fd5b813567ffffffffffffffff808211156103b0576103b06102e9565b604051601f8301601f19908116603f011681019082821181831017156103d8576103d86102e9565b816040528381528660208588010111156103f0575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f6020828403121561041f575f80fd5b813567ffffffffffffffff80821115610436575f80fd5b9083019060408286031215610449575f80fd5b610451610316565b823561045c81610362565b815260208301358281111561046f575f80fd5b929092019160808387031215610483575f80fd5b61048b61033f565b833561049681610362565b81526020840135838111156104a9575f80fd5b6104b588828701610386565b6020830152506040840135838111156104cc575f80fd5b6104d888828701610386565b604083015250606084013593506104ee84610362565b60608101939093526020810192909252509392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f73ffffffffffffffffffffffffffffffffffffffff8084511660208401526020840151604080850152818151166060850152602081015160808086015261058360e0860182610506565b905060408201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08683030160a08701526105be8282610506565b9150508260608301511660c086015280935050505092915050565b5f602082840312156105e9575f80fd5b81516102e28161036256"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b5060043610610034575f3560e01c806301ffc9a714610038578063733e1f8d1461005f575b5f80fd5b61004b6100463660046102a3565b610074565b604051901515815260200160405180910390f35b61007261006d36600461042d565b61010c565b005b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f733e1f8d00000000000000000000000000000000000000000000000000000000148061010657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040517f4904fab30000000000000000000000000000000000000000000000000000000081525f9073679ab223dab158ea93e1a4f49104de436c58eab890634904fab39061015e908590600401610570565b6020604051808303815f875af115801561017a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061019e9190610615565b6040517fd786858b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201529091505f90736b4232f1046f1f1bb99a1184d886bbaf3cd7e15a9063d786858b906024016020604051808303815f875af1158015610220573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102449190610615565b6040805133815273ffffffffffffffffffffffffffffffffffffffff858116602083015283168183015290519192507fa0d99d93cf7a5f89661fa0829369a7e4896e755871efe65440bab2429387d55b919081900360600190a1505050565b5f602082840312156102b3575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146102e2575f80fd5b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff81118282101715610339576103396102e9565b60405290565b6040516080810167ffffffffffffffff81118282101715610339576103396102e9565b73ffffffffffffffffffffffffffffffffffffffff81168114610383575f80fd5b50565b5f82601f830112610395575f80fd5b813567ffffffffffffffff808211156103b0576103b06102e9565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156103f6576103f66102e9565b8160405283815286602085880101111561040e575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f6020828403121561043d575f80fd5b813567ffffffffffffffff80821115610454575f80fd5b9083019060408286031215610467575f80fd5b61046f610316565b823561047a81610362565b815260208301358281111561048d575f80fd5b9290920191608083870312156104a1575f80fd5b6104a961033f565b83356104b481610362565b81526020840135838111156104c7575f80fd5b6104d388828701610386565b6020830152506040840135838111156104ea575f80fd5b6104f688828701610386565b6040830152506060840135935061050c84610362565b60608101939093526020810192909252509392505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f73ffffffffffffffffffffffffffffffffffffffff808451166020840152602084015160408085015281815116606085015260208101516080808601526105bf60e0860182610524565b905060408201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08683030160a08701526105fa8282610524565b9150508260608301511660c086015280935050505092915050565b5f60208284031215610625575f80fd5b81516102e28161036256"; + hex"608060405234801561000f575f80fd5b5060043610610034575f3560e01c806301ffc9a714610038578063733e1f8d1461005f575b5f80fd5b61004b6100463660046102a3565b610074565b604051901515815260200160405180910390f35b61007261006d36600461040f565b61010c565b005b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f733e1f8d00000000000000000000000000000000000000000000000000000000148061010657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040517f4904fab30000000000000000000000000000000000000000000000000000000081525f907359afe8ae48de65d9916b99c8cf9977061955c9a790634904fab39061015e908590600401610534565b6020604051808303815f875af115801561017a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061019e91906105d9565b6040517fd786858b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201529091505f9073d0395427938c83d5ac663be80147ff149ace98e79063d786858b906024016020604051808303815f875af1158015610220573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061024491906105d9565b6040805133815273ffffffffffffffffffffffffffffffffffffffff858116602083015283168183015290519192507fa0d99d93cf7a5f89661fa0829369a7e4896e755871efe65440bab2429387d55b919081900360600190a1505050565b5f602082840312156102b3575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146102e2575f80fd5b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff81118282101715610339576103396102e9565b60405290565b6040516080810167ffffffffffffffff81118282101715610339576103396102e9565b73ffffffffffffffffffffffffffffffffffffffff81168114610383575f80fd5b50565b5f82601f830112610395575f80fd5b813567ffffffffffffffff808211156103b0576103b06102e9565b604051601f8301601f19908116603f011681019082821181831017156103d8576103d86102e9565b816040528381528660208588010111156103f0575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f6020828403121561041f575f80fd5b813567ffffffffffffffff80821115610436575f80fd5b9083019060408286031215610449575f80fd5b610451610316565b823561045c81610362565b815260208301358281111561046f575f80fd5b929092019160808387031215610483575f80fd5b61048b61033f565b833561049681610362565b81526020840135838111156104a9575f80fd5b6104b588828701610386565b6020830152506040840135838111156104cc575f80fd5b6104d888828701610386565b604083015250606084013593506104ee84610362565b60608101939093526020810192909252509392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f73ffffffffffffffffffffffffffffffffffffffff8084511660208401526020840151604080850152818151166060850152602081015160808086015261058360e0860182610506565b905060408201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08683030160a08701526105be8282610506565b9150508260608301511660c086015280935050505092915050565b5f602082840312156105e9575f80fd5b81516102e28161036256"; diff --git a/src/generated/candidate/StoxWrappedTokenVault.pointers.sol b/src/generated/candidate/StoxWrappedTokenVault.pointers.sol index 18c6e307..7e5ea120 100644 --- a/src/generated/candidate/StoxWrappedTokenVault.pointers.sol +++ b/src/generated/candidate/StoxWrappedTokenVault.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x6de4c556c1811293da4ad2e509ee476f3eb635f019845087e1d2777a1b272034); +bytes32 constant BYTECODE_HASH = bytes32(0x46286068eab6f0e0919f54b2f3145630553f33e14b0b6f4b23510355bbc14083); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x0D99e0174DbF885ceD6AE8dEb939b0F890450099); +address constant DEPLOYED_ADDRESS = address(0x09e409fBc6896C4cA7440BD49Ba52173ba4cC0cF); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611de4806100d65f395ff3fe608060405234801561000f575f80fd5b50600436106101b0575f3560e01c806370a08231116100f3578063c4d66de811610093578063ce96cb771161006e578063ce96cb77146103c9578063d905777e146103dc578063dd62ed3e146103ef578063ef8b30f7146103b6575f80fd5b8063c4d66de8146103a3578063c63d75b6146102bb578063c6e6f592146103b6575f80fd5b8063a9059cbb116100ce578063a9059cbb14610357578063b3d7f6b91461036a578063b460af941461037d578063ba08765214610390575f80fd5b806370a08231146102f557806394bf804d1461033c57806395d89b411461034f575f80fd5b806323b872dd1161015e578063402d267d11610139578063402d267d146102bb578063439fab91146102cf5780634cdad506146101e45780636e553f65146102e2575f80fd5b806323b872dd14610254578063313ce5671461026757806338d52e0f14610281575f80fd5b8063095ea7b31161018e578063095ea7b3146101f75780630a28a4771461021a57806318160ddd1461022d575f80fd5b806301e1d114146101b457806306fdde03146101cf57806307a2d13a146101e4575b5f80fd5b6101bc610446565b6040519081526020015b60405180910390f35b6101d76104fe565b6040516101c69190611758565b6101bc6101f236600461178d565b6105b6565b61020a6102053660046117b8565b6105c7565b60405190151581526020016101c6565b6101bc61022836600461178d565b6105de565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02546101bc565b61020a6102623660046117e2565b6105ea565b61026f61060f565b60405160ff90911681526020016101c6565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546040516001600160a01b0390911681526020016101c6565b6101bc6102c9366004611820565b505f1990565b6101bc6102dd36600461183b565b610662565b6101bc6102f03660046118a7565b61089d565b6101bc610303366004611820565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b6101bc61034a3660046118a7565b6108ce565b6101d76108e9565b61020a6103653660046117b8565b61098d565b6101bc61037836600461178d565b61099a565b6101bc61038b3660046118d5565b6109a6565b6101bc61039e3660046118d5565b610a28565b6101bc6103b1366004611820565b610aa1565b6101bc6103c436600461178d565b610ad4565b6101bc6103d7366004611820565b610adf565b6101bc6103ea366004611820565b610ae8565b6101bc6103fd366004611914565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b5f6104787f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156104d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f99190611940565b905090565b60606105317f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b6001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa15801561056b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105929190810190611984565b6040516020016105a29190611a46565b604051602081830303815290604052905090565b5f6105c1825f610b24565b92915050565b5f336105d4818585610b7b565b5060019392505050565b5f6105c1826001610b8d565b5f336105f7858285610bdb565b610602858585610c8f565b60019150505b9392505050565b5f807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e0090505f815461065c919074010000000000000000000000000000000000000000900460ff16611aa4565b91505090565b5f8061066c610d1e565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156106985750825b90505f8267ffffffffffffffff1660011480156106b45750303b155b9050811580156106c2575080155b156106f9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561075a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b5f610767888a018a611820565b90506001600160a01b0381166107a9576040517f7cde9b7200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b281610d46565b6107d860405180602001604052805f81525060405180602001604052805f815250610d5a565b6040516001600160a01b0382169033907fdf5fabff9e49f8c35d69a1f2d0c5e80c933c31cf836cf70de57e3a6e7dc86ebb905f90a37fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc396505083156108925784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505092915050565b5f5f196108ae565b60405180910390fd5b5f6108b885610ad4565b90506108c633858784610d70565b949350505050565b5f5f195f6108db8561099a565b90506108c633858388610d70565b606061091c7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b6001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610956573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261097d9190810190611984565b6040516020016105a29190611abd565b5f336105d4818585610c8f565b5f6105c1826001610b24565b5f806109b183610adf565b905080851115610a06576040517ffe9cceec0000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101869052604481018290526064016108a5565b5f610a10866105de565b9050610a1f3386868985610de0565b95945050505050565b5f80610a3383610ae8565b905080851115610a88576040517fb94abeec0000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101869052604481018290526064016108a5565b5f610a92866105b6565b9050610a1f338686848a610de0565b5f6040517faf1fbb2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105c1825f610b8d565b5f6105c16101f2835b6001600160a01b0381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0060205260408120546105c1565b5f610608610b30610446565b610b3b906001611aee565b610b465f600a611be1565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610b729190611aee565b85919085610e7f565b610b888383836001610ec1565b505050565b5f610608610b9c82600a611be1565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610bc89190611aee565b610bd0610446565b610b72906001611aee565b6001600160a01b038381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160209081526040808320938616835292905220545f19811015610c895781811015610c7b576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101829052604481018390526064016108a5565b610c8984848484035f610ec1565b50505050565b6001600160a01b038316610cd1576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f60048201526024016108a5565b6001600160a01b038216610d13576040517fec442f050000000000000000000000000000000000000000000000000000000081525f60048201526024016108a5565b610b88838383610fea565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006105c1565b610d4e611141565b610d5781611181565b50565b610d62611141565b610d6c8282611245565b5050565b610d7a84836112a8565b610d8483826112e4565b826001600160a01b0316846001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051610dd2929190918252602082015260400190565b60405180910390a350505050565b826001600160a01b0316856001600160a01b031614610e0457610e04838683610bdb565b610e0e8382611331565b610e18848361137e565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051610e70929190918252602082015260400190565b60405180910390a45050505050565b5f610eac610e8c836113b9565b8015610ea757505f8480610ea257610ea2611bef565b868809115b151590565b610eb78686866113e5565b610a1f9190611aee565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038516610f24576040517fe602df050000000000000000000000000000000000000000000000000000000081525f60048201526024016108a5565b6001600160a01b038416610f66576040517f94280d620000000000000000000000000000000000000000000000000000000081525f60048201526024016108a5565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610fe357836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610fda91815260200190565b60405180910390a35b5050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b0384166110375781816002015f82825461102c9190611aee565b909155506110c09050565b6001600160a01b0384165f90815260208290526040902054828110156110a2576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101829052604481018490526064016108a5565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b0383166110de5760028101805483900390556110fc565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610dd291815260200190565b611149611495565b61117f576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611189611141565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e005f806111b5846114b3565b91509150816111c55760126111c7565b805b83547fffffffffffffffffffffff000000000000000000000000000000000000000000167401000000000000000000000000000000000000000060ff92909216919091027fffffffffffffffffffffffff000000000000000000000000000000000000000016176001600160a01b0394909416939093179091555050565b61124d611141565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036112998482611cb1565b5060048101610c898382611cb1565b610d6c6112dc7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b83308461156c565b6001600160a01b038216611326576040517fec442f050000000000000000000000000000000000000000000000000000000081525f60048201526024016108a5565b610d6c5f8383610fea565b6001600160a01b038216611373576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f60048201526024016108a5565b610d6c825f83610fea565b610d6c6113b27f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b83836115bb565b5f60028260038111156113ce576113ce611d71565b6113d89190611d9e565b60ff166001149050919050565b5f805f6113f28686611609565b91509150815f036114165783818161140c5761140c611bef565b0492505050610608565b81841161142d5761142d6003851502601118611625565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f61149e610d1e565b5468010000000000000000900460ff16919050565b5f805f6114bf60405190565b6040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce567000000000000000000000000000000000000000000000000000000001790529091505f908190611528908790611636565b509150915061153683604052565b818015611544575060203d10155b8015611551575060ff8111155b61155c575f80611560565b6001815b94509450505050915091565b61157a848484846001611657565b610c89576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016108a5565b6115c883838360016116dd565b610b88576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016108a5565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f805f60405f855160208701885afa92505f51915060205190509250925092565b6040517f23b872dd000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f511483166116cc5783831516156116c0573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f5114831661174c578383151615611740573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561179d575f80fd5b5035919050565b6001600160a01b0381168114610d57575f80fd5b5f80604083850312156117c9575f80fd5b82356117d4816117a4565b946020939093013593505050565b5f805f606084860312156117f4575f80fd5b83356117ff816117a4565b9250602084013561180f816117a4565b929592945050506040919091013590565b5f60208284031215611830575f80fd5b8135610608816117a4565b5f806020838503121561184c575f80fd5b823567ffffffffffffffff80821115611863575f80fd5b818501915085601f830112611876575f80fd5b813581811115611884575f80fd5b866020828501011115611895575f80fd5b60209290920196919550909350505050565b5f80604083850312156118b8575f80fd5b8235915060208301356118ca816117a4565b809150509250929050565b5f805f606084860312156118e7575f80fd5b8335925060208401356118f9816117a4565b91506040840135611909816117a4565b809150509250925092565b5f8060408385031215611925575f80fd5b8235611930816117a4565b915060208301356118ca816117a4565b5f60208284031215611950575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215611994575f80fd5b815167ffffffffffffffff808211156119ab575f80fd5b818401915084601f8301126119be575f80fd5b8151818111156119d0576119d0611957565b604051601f8201601f19908116603f011681019083821181831017156119f8576119f8611957565b81604052828152876020848701011115611a10575f80fd5b8260208601602083015e5f928101602001929092525095945050505050565b5f81518060208401855e5f93019283525090919050565b7f577261707065642000000000000000000000000000000000000000000000000081525f6106086008830184611a2f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff81811683821601908111156105c1576105c1611a77565b7f770000000000000000000000000000000000000000000000000000000000000081525f6106086001830184611a2f565b808201808211156105c1576105c1611a77565b600181815b80851115611b3b57815f1904821115611b2157611b21611a77565b80851615611b2e57918102915b93841c9390800290611b06565b509250929050565b5f82611b51575060016105c1565b81611b5d57505f6105c1565b8160018114611b735760028114611b7d57611b99565b60019150506105c1565b60ff841115611b8e57611b8e611a77565b50506001821b6105c1565b5060208310610133831016604e8410600b8410161715611bbc575081810a6105c1565b611bc68383611b01565b805f1904821115611bd957611bd9611a77565b029392505050565b5f61060860ff841683611b43565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b600181811c90821680611c3057607f821691505b602082108103611c67577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b601f821115610b8857805f5260205f20601f840160051c81016020851015611c925750805b601f840160051c820191505b81811015610fe3575f8155600101611c9e565b815167ffffffffffffffff811115611ccb57611ccb611957565b611cdf81611cd98454611c1c565b84611c6d565b602080601f831160018114611d12575f8415611cfb5750858301515b5f19600386901b1c1916600185901b178555611d69565b5f85815260208120601f198616915b82811015611d4057888601518255948401946001909101908401611d21565b5085821015611d5d57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff831680611dd5577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff8416069150509291505056"; + hex"6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611d22806100d65f395ff3fe608060405234801561000f575f80fd5b50600436106101b0575f3560e01c806370a08231116100f3578063c4d66de811610093578063ce96cb771161006e578063ce96cb77146103c9578063d905777e146103dc578063dd62ed3e146103ef578063ef8b30f7146103b6575f80fd5b8063c4d66de8146103a3578063c63d75b6146102bb578063c6e6f592146103b6575f80fd5b8063a9059cbb116100ce578063a9059cbb14610357578063b3d7f6b91461036a578063b460af941461037d578063ba08765214610390575f80fd5b806370a08231146102f557806394bf804d1461033c57806395d89b411461034f575f80fd5b806323b872dd1161015e578063402d267d11610139578063402d267d146102bb578063439fab91146102cf5780634cdad506146101e45780636e553f65146102e2575f80fd5b806323b872dd14610254578063313ce5671461026757806338d52e0f14610281575f80fd5b8063095ea7b31161018e578063095ea7b3146101f75780630a28a4771461021a57806318160ddd1461022d575f80fd5b806301e1d114146101b457806306fdde03146101cf57806307a2d13a146101e4575b5f80fd5b6101bc610446565b6040519081526020015b60405180910390f35b6101d76104fe565b6040516101c6919061172c565b6101bc6101f2366004611761565b6105b6565b61020a61020536600461178c565b6105c7565b60405190151581526020016101c6565b6101bc610228366004611761565b6105de565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02546101bc565b61020a6102623660046117b6565b6105ea565b61026f61060f565b60405160ff90911681526020016101c6565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546040516001600160a01b0390911681526020016101c6565b6101bc6102c93660046117f4565b505f1990565b6101bc6102dd36600461180f565b610662565b6101bc6102f036600461187b565b610871565b6101bc6103033660046117f4565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b6101bc61034a36600461187b565b6108a2565b6101d76108bd565b61020a61036536600461178c565b610961565b6101bc610378366004611761565b61096e565b6101bc61038b3660046118a9565b61097a565b6101bc61039e3660046118a9565b6109fc565b6101bc6103b13660046117f4565b610a75565b6101bc6103c4366004611761565b610aa8565b6101bc6103d73660046117f4565b610ab3565b6101bc6103ea3660046117f4565b610abc565b6101bc6103fd3660046118e8565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b5f6104787f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156104d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f99190611914565b905090565b60606105317f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b6001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa15801561056b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610592919081019061193f565b6040516020016105a29190611a01565b604051602081830303815290604052905090565b5f6105c1825f610af8565b92915050565b5f336105d4818585610b4f565b5060019392505050565b5f6105c1826001610b61565b5f336105f7858285610baf565b610602858585610c63565b60019150505b9392505050565b5f807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e0090505f815461065c919074010000000000000000000000000000000000000000900460ff16611a46565b91505090565b5f8061066c610cf2565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156106985750825b90505f8267ffffffffffffffff1660011480156106b45750303b155b9050811580156106c2575080155b156106f9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561074457845468ff00000000000000001916680100000000000000001785555b5f610751888a018a6117f4565b90506001600160a01b038116610793576040517f7cde9b7200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61079c81610d1a565b6107c260405180602001604052805f81525060405180602001604052805f815250610d2e565b6040516001600160a01b0382169033907fdf5fabff9e49f8c35d69a1f2d0c5e80c933c31cf836cf70de57e3a6e7dc86ebb905f90a37fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc3965050831561086657845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505092915050565b5f5f19610882565b60405180910390fd5b5f61088c85610aa8565b905061089a33858784610d44565b949350505050565b5f5f195f6108af8561096e565b905061089a33858388610d44565b60606108f07f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b6001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa15801561092a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610951919081019061193f565b6040516020016105a29190611a5f565b5f336105d4818585610c63565b5f6105c1826001610af8565b5f8061098583610ab3565b9050808511156109da576040517ffe9cceec0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810186905260448101829052606401610879565b5f6109e4866105de565b90506109f33386868985610db4565b95945050505050565b5f80610a0783610abc565b905080851115610a5c576040517fb94abeec0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810186905260448101829052606401610879565b5f610a66866105b6565b90506109f3338686848a610db4565b5f6040517faf1fbb2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105c1825f610b61565b5f6105c16101f2835b6001600160a01b0381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0060205260408120546105c1565b5f610608610b04610446565b610b0f906001611a90565b610b1a5f600a611b83565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610b469190611a90565b85919085610e53565b610b5c8383836001610e95565b505050565b5f610608610b7082600a611b83565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610b9c9190611a90565b610ba4610446565b610b46906001611a90565b6001600160a01b038381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160209081526040808320938616835292905220545f19811015610c5d5781811015610c4f576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401610879565b610c5d84848484035f610e95565b50505050565b6001600160a01b038316610ca5576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610879565b6001600160a01b038216610ce7576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610879565b610b5c838383610fbe565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006105c1565b610d22611115565b610d2b81611155565b50565b610d36611115565b610d408282611219565b5050565b610d4e848361127c565b610d5883826112b8565b826001600160a01b0316846001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051610da6929190918252602082015260400190565b60405180910390a350505050565b826001600160a01b0316856001600160a01b031614610dd857610dd8838683610baf565b610de28382611305565b610dec8483611352565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051610e44929190918252602082015260400190565b60405180910390a45050505050565b5f610e80610e608361138d565b8015610e7b57505f8480610e7657610e76611b91565b868809115b151590565b610e8b8686866113b9565b6109f39190611a90565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038516610ef8576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610879565b6001600160a01b038416610f3a576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610879565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610fb757836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610fae91815260200190565b60405180910390a35b5050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b03841661100b5781816002015f8282546110009190611a90565b909155506110949050565b6001600160a01b0384165f9081526020829052604090205482811015611076576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810182905260448101849052606401610879565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b0383166110b25760028101805483900390556110d0565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610da691815260200190565b61111d611469565b611153576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b61115d611115565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e005f8061118984611487565b915091508161119957601261119b565b805b83547fffffffffffffffffffffff000000000000000000000000000000000000000000167401000000000000000000000000000000000000000060ff92909216919091027fffffffffffffffffffffffff000000000000000000000000000000000000000016176001600160a01b0394909416939093179091555050565b611221611115565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361126d8482611c21565b5060048101610c5d8382611c21565b610d406112b07f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b833084611540565b6001600160a01b0382166112fa576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610879565b610d405f8383610fbe565b6001600160a01b038216611347576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610879565b610d40825f83610fbe565b610d406113867f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b838361158f565b5f60028260038111156113a2576113a2611ce1565b6113ac9190611cf5565b60ff166001149050919050565b5f805f6113c686866115dd565b91509150815f036113ea578381816113e0576113e0611b91565b0492505050610608565b8184116114015761140160038515026011186115f9565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f611472610cf2565b5468010000000000000000900460ff16919050565b5f805f61149360405190565b6040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce567000000000000000000000000000000000000000000000000000000001790529091505f9081906114fc90879061160a565b509150915061150a83604052565b818015611518575060203d10155b8015611525575060ff8111155b611530575f80611534565b6001815b94509450505050915091565b61154e84848484600161162b565b610c5d576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610879565b61159c83838360016116b1565b610b5c576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610879565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f805f60405f855160208701885afa92505f51915060205190509250925092565b6040517f23b872dd000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f511483166116a0578383151615611694573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316611720578383151615611714573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215611771575f80fd5b5035919050565b6001600160a01b0381168114610d2b575f80fd5b5f806040838503121561179d575f80fd5b82356117a881611778565b946020939093013593505050565b5f805f606084860312156117c8575f80fd5b83356117d381611778565b925060208401356117e381611778565b929592945050506040919091013590565b5f60208284031215611804575f80fd5b813561060881611778565b5f8060208385031215611820575f80fd5b823567ffffffffffffffff80821115611837575f80fd5b818501915085601f83011261184a575f80fd5b813581811115611858575f80fd5b866020828501011115611869575f80fd5b60209290920196919550909350505050565b5f806040838503121561188c575f80fd5b82359150602083013561189e81611778565b809150509250929050565b5f805f606084860312156118bb575f80fd5b8335925060208401356118cd81611778565b915060408401356118dd81611778565b809150509250925092565b5f80604083850312156118f9575f80fd5b823561190481611778565b9150602083013561189e81611778565b5f60208284031215611924575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561194f575f80fd5b815167ffffffffffffffff80821115611966575f80fd5b818401915084601f830112611979575f80fd5b81518181111561198b5761198b61192b565b604051601f8201601f19908116603f011681019083821181831017156119b3576119b361192b565b816040528281528760208487010111156119cb575f80fd5b8260208601602083015e5f928101602001929092525095945050505050565b5f81518060208401855e5f93019283525090919050565b7f577261707065642000000000000000000000000000000000000000000000000081525f61060860088301846119ea565b634e487b7160e01b5f52601160045260245ffd5b60ff81811683821601908111156105c1576105c1611a32565b7f770000000000000000000000000000000000000000000000000000000000000081525f61060860018301846119ea565b808201808211156105c1576105c1611a32565b600181815b80851115611add57815f1904821115611ac357611ac3611a32565b80851615611ad057918102915b93841c9390800290611aa8565b509250929050565b5f82611af3575060016105c1565b81611aff57505f6105c1565b8160018114611b155760028114611b1f57611b3b565b60019150506105c1565b60ff841115611b3057611b30611a32565b50506001821b6105c1565b5060208310610133831016604e8410600b8410161715611b5e575081810a6105c1565b611b688383611aa3565b805f1904821115611b7b57611b7b611a32565b029392505050565b5f61060860ff841683611ae5565b634e487b7160e01b5f52601260045260245ffd5b600181811c90821680611bb957607f821691505b602082108103611bd757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610b5c57805f5260205f20601f840160051c81016020851015611c025750805b601f840160051c820191505b81811015610fb7575f8155600101611c0e565b815167ffffffffffffffff811115611c3b57611c3b61192b565b611c4f81611c498454611ba5565b84611bdd565b602080601f831160018114611c82575f8415611c6b5750858301515b5f19600386901b1c1916600185901b178555611cd9565b5f85815260208120601f198616915b82811015611cb057888601518255948401946001909101908401611c91565b5085821015611ccd57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52602160045260245ffd5b5f60ff831680611d1357634e487b7160e01b5f52601260045260245ffd5b8060ff8416069150509291505056"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b50600436106101b0575f3560e01c806370a08231116100f3578063c4d66de811610093578063ce96cb771161006e578063ce96cb77146103c9578063d905777e146103dc578063dd62ed3e146103ef578063ef8b30f7146103b6575f80fd5b8063c4d66de8146103a3578063c63d75b6146102bb578063c6e6f592146103b6575f80fd5b8063a9059cbb116100ce578063a9059cbb14610357578063b3d7f6b91461036a578063b460af941461037d578063ba08765214610390575f80fd5b806370a08231146102f557806394bf804d1461033c57806395d89b411461034f575f80fd5b806323b872dd1161015e578063402d267d11610139578063402d267d146102bb578063439fab91146102cf5780634cdad506146101e45780636e553f65146102e2575f80fd5b806323b872dd14610254578063313ce5671461026757806338d52e0f14610281575f80fd5b8063095ea7b31161018e578063095ea7b3146101f75780630a28a4771461021a57806318160ddd1461022d575f80fd5b806301e1d114146101b457806306fdde03146101cf57806307a2d13a146101e4575b5f80fd5b6101bc610446565b6040519081526020015b60405180910390f35b6101d76104fe565b6040516101c69190611758565b6101bc6101f236600461178d565b6105b6565b61020a6102053660046117b8565b6105c7565b60405190151581526020016101c6565b6101bc61022836600461178d565b6105de565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02546101bc565b61020a6102623660046117e2565b6105ea565b61026f61060f565b60405160ff90911681526020016101c6565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546040516001600160a01b0390911681526020016101c6565b6101bc6102c9366004611820565b505f1990565b6101bc6102dd36600461183b565b610662565b6101bc6102f03660046118a7565b61089d565b6101bc610303366004611820565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b6101bc61034a3660046118a7565b6108ce565b6101d76108e9565b61020a6103653660046117b8565b61098d565b6101bc61037836600461178d565b61099a565b6101bc61038b3660046118d5565b6109a6565b6101bc61039e3660046118d5565b610a28565b6101bc6103b1366004611820565b610aa1565b6101bc6103c436600461178d565b610ad4565b6101bc6103d7366004611820565b610adf565b6101bc6103ea366004611820565b610ae8565b6101bc6103fd366004611914565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b5f6104787f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156104d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f99190611940565b905090565b60606105317f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b6001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa15801561056b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105929190810190611984565b6040516020016105a29190611a46565b604051602081830303815290604052905090565b5f6105c1825f610b24565b92915050565b5f336105d4818585610b7b565b5060019392505050565b5f6105c1826001610b8d565b5f336105f7858285610bdb565b610602858585610c8f565b60019150505b9392505050565b5f807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e0090505f815461065c919074010000000000000000000000000000000000000000900460ff16611aa4565b91505090565b5f8061066c610d1e565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156106985750825b90505f8267ffffffffffffffff1660011480156106b45750303b155b9050811580156106c2575080155b156106f9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561075a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b5f610767888a018a611820565b90506001600160a01b0381166107a9576040517f7cde9b7200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b281610d46565b6107d860405180602001604052805f81525060405180602001604052805f815250610d5a565b6040516001600160a01b0382169033907fdf5fabff9e49f8c35d69a1f2d0c5e80c933c31cf836cf70de57e3a6e7dc86ebb905f90a37fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc396505083156108925784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505092915050565b5f5f196108ae565b60405180910390fd5b5f6108b885610ad4565b90506108c633858784610d70565b949350505050565b5f5f195f6108db8561099a565b90506108c633858388610d70565b606061091c7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b6001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610956573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261097d9190810190611984565b6040516020016105a29190611abd565b5f336105d4818585610c8f565b5f6105c1826001610b24565b5f806109b183610adf565b905080851115610a06576040517ffe9cceec0000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101869052604481018290526064016108a5565b5f610a10866105de565b9050610a1f3386868985610de0565b95945050505050565b5f80610a3383610ae8565b905080851115610a88576040517fb94abeec0000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101869052604481018290526064016108a5565b5f610a92866105b6565b9050610a1f338686848a610de0565b5f6040517faf1fbb2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105c1825f610b8d565b5f6105c16101f2835b6001600160a01b0381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0060205260408120546105c1565b5f610608610b30610446565b610b3b906001611aee565b610b465f600a611be1565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610b729190611aee565b85919085610e7f565b610b888383836001610ec1565b505050565b5f610608610b9c82600a611be1565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610bc89190611aee565b610bd0610446565b610b72906001611aee565b6001600160a01b038381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160209081526040808320938616835292905220545f19811015610c895781811015610c7b576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101829052604481018390526064016108a5565b610c8984848484035f610ec1565b50505050565b6001600160a01b038316610cd1576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f60048201526024016108a5565b6001600160a01b038216610d13576040517fec442f050000000000000000000000000000000000000000000000000000000081525f60048201526024016108a5565b610b88838383610fea565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006105c1565b610d4e611141565b610d5781611181565b50565b610d62611141565b610d6c8282611245565b5050565b610d7a84836112a8565b610d8483826112e4565b826001600160a01b0316846001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051610dd2929190918252602082015260400190565b60405180910390a350505050565b826001600160a01b0316856001600160a01b031614610e0457610e04838683610bdb565b610e0e8382611331565b610e18848361137e565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051610e70929190918252602082015260400190565b60405180910390a45050505050565b5f610eac610e8c836113b9565b8015610ea757505f8480610ea257610ea2611bef565b868809115b151590565b610eb78686866113e5565b610a1f9190611aee565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038516610f24576040517fe602df050000000000000000000000000000000000000000000000000000000081525f60048201526024016108a5565b6001600160a01b038416610f66576040517f94280d620000000000000000000000000000000000000000000000000000000081525f60048201526024016108a5565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610fe357836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610fda91815260200190565b60405180910390a35b5050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b0384166110375781816002015f82825461102c9190611aee565b909155506110c09050565b6001600160a01b0384165f90815260208290526040902054828110156110a2576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101829052604481018490526064016108a5565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b0383166110de5760028101805483900390556110fc565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610dd291815260200190565b611149611495565b61117f576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611189611141565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e005f806111b5846114b3565b91509150816111c55760126111c7565b805b83547fffffffffffffffffffffff000000000000000000000000000000000000000000167401000000000000000000000000000000000000000060ff92909216919091027fffffffffffffffffffffffff000000000000000000000000000000000000000016176001600160a01b0394909416939093179091555050565b61124d611141565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036112998482611cb1565b5060048101610c898382611cb1565b610d6c6112dc7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b83308461156c565b6001600160a01b038216611326576040517fec442f050000000000000000000000000000000000000000000000000000000081525f60048201526024016108a5565b610d6c5f8383610fea565b6001600160a01b038216611373576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f60048201526024016108a5565b610d6c825f83610fea565b610d6c6113b27f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b83836115bb565b5f60028260038111156113ce576113ce611d71565b6113d89190611d9e565b60ff166001149050919050565b5f805f6113f28686611609565b91509150815f036114165783818161140c5761140c611bef565b0492505050610608565b81841161142d5761142d6003851502601118611625565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f61149e610d1e565b5468010000000000000000900460ff16919050565b5f805f6114bf60405190565b6040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce567000000000000000000000000000000000000000000000000000000001790529091505f908190611528908790611636565b509150915061153683604052565b818015611544575060203d10155b8015611551575060ff8111155b61155c575f80611560565b6001815b94509450505050915091565b61157a848484846001611657565b610c89576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016108a5565b6115c883838360016116dd565b610b88576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016108a5565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f805f60405f855160208701885afa92505f51915060205190509250925092565b6040517f23b872dd000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f511483166116cc5783831516156116c0573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f5114831661174c578383151615611740573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561179d575f80fd5b5035919050565b6001600160a01b0381168114610d57575f80fd5b5f80604083850312156117c9575f80fd5b82356117d4816117a4565b946020939093013593505050565b5f805f606084860312156117f4575f80fd5b83356117ff816117a4565b9250602084013561180f816117a4565b929592945050506040919091013590565b5f60208284031215611830575f80fd5b8135610608816117a4565b5f806020838503121561184c575f80fd5b823567ffffffffffffffff80821115611863575f80fd5b818501915085601f830112611876575f80fd5b813581811115611884575f80fd5b866020828501011115611895575f80fd5b60209290920196919550909350505050565b5f80604083850312156118b8575f80fd5b8235915060208301356118ca816117a4565b809150509250929050565b5f805f606084860312156118e7575f80fd5b8335925060208401356118f9816117a4565b91506040840135611909816117a4565b809150509250925092565b5f8060408385031215611925575f80fd5b8235611930816117a4565b915060208301356118ca816117a4565b5f60208284031215611950575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215611994575f80fd5b815167ffffffffffffffff808211156119ab575f80fd5b818401915084601f8301126119be575f80fd5b8151818111156119d0576119d0611957565b604051601f8201601f19908116603f011681019083821181831017156119f8576119f8611957565b81604052828152876020848701011115611a10575f80fd5b8260208601602083015e5f928101602001929092525095945050505050565b5f81518060208401855e5f93019283525090919050565b7f577261707065642000000000000000000000000000000000000000000000000081525f6106086008830184611a2f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff81811683821601908111156105c1576105c1611a77565b7f770000000000000000000000000000000000000000000000000000000000000081525f6106086001830184611a2f565b808201808211156105c1576105c1611a77565b600181815b80851115611b3b57815f1904821115611b2157611b21611a77565b80851615611b2e57918102915b93841c9390800290611b06565b509250929050565b5f82611b51575060016105c1565b81611b5d57505f6105c1565b8160018114611b735760028114611b7d57611b99565b60019150506105c1565b60ff841115611b8e57611b8e611a77565b50506001821b6105c1565b5060208310610133831016604e8410600b8410161715611bbc575081810a6105c1565b611bc68383611b01565b805f1904821115611bd957611bd9611a77565b029392505050565b5f61060860ff841683611b43565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b600181811c90821680611c3057607f821691505b602082108103611c67577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b601f821115610b8857805f5260205f20601f840160051c81016020851015611c925750805b601f840160051c820191505b81811015610fe3575f8155600101611c9e565b815167ffffffffffffffff811115611ccb57611ccb611957565b611cdf81611cd98454611c1c565b84611c6d565b602080601f831160018114611d12575f8415611cfb5750858301515b5f19600386901b1c1916600185901b178555611d69565b5f85815260208120601f198616915b82811015611d4057888601518255948401946001909101908401611d21565b5085821015611d5d57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff831680611dd5577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff8416069150509291505056"; + hex"608060405234801561000f575f80fd5b50600436106101b0575f3560e01c806370a08231116100f3578063c4d66de811610093578063ce96cb771161006e578063ce96cb77146103c9578063d905777e146103dc578063dd62ed3e146103ef578063ef8b30f7146103b6575f80fd5b8063c4d66de8146103a3578063c63d75b6146102bb578063c6e6f592146103b6575f80fd5b8063a9059cbb116100ce578063a9059cbb14610357578063b3d7f6b91461036a578063b460af941461037d578063ba08765214610390575f80fd5b806370a08231146102f557806394bf804d1461033c57806395d89b411461034f575f80fd5b806323b872dd1161015e578063402d267d11610139578063402d267d146102bb578063439fab91146102cf5780634cdad506146101e45780636e553f65146102e2575f80fd5b806323b872dd14610254578063313ce5671461026757806338d52e0f14610281575f80fd5b8063095ea7b31161018e578063095ea7b3146101f75780630a28a4771461021a57806318160ddd1461022d575f80fd5b806301e1d114146101b457806306fdde03146101cf57806307a2d13a146101e4575b5f80fd5b6101bc610446565b6040519081526020015b60405180910390f35b6101d76104fe565b6040516101c6919061172c565b6101bc6101f2366004611761565b6105b6565b61020a61020536600461178c565b6105c7565b60405190151581526020016101c6565b6101bc610228366004611761565b6105de565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02546101bc565b61020a6102623660046117b6565b6105ea565b61026f61060f565b60405160ff90911681526020016101c6565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546040516001600160a01b0390911681526020016101c6565b6101bc6102c93660046117f4565b505f1990565b6101bc6102dd36600461180f565b610662565b6101bc6102f036600461187b565b610871565b6101bc6103033660046117f4565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b6101bc61034a36600461187b565b6108a2565b6101d76108bd565b61020a61036536600461178c565b610961565b6101bc610378366004611761565b61096e565b6101bc61038b3660046118a9565b61097a565b6101bc61039e3660046118a9565b6109fc565b6101bc6103b13660046117f4565b610a75565b6101bc6103c4366004611761565b610aa8565b6101bc6103d73660046117f4565b610ab3565b6101bc6103ea3660046117f4565b610abc565b6101bc6103fd3660046118e8565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b5f6104787f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156104d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f99190611914565b905090565b60606105317f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b6001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa15801561056b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610592919081019061193f565b6040516020016105a29190611a01565b604051602081830303815290604052905090565b5f6105c1825f610af8565b92915050565b5f336105d4818585610b4f565b5060019392505050565b5f6105c1826001610b61565b5f336105f7858285610baf565b610602858585610c63565b60019150505b9392505050565b5f807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e0090505f815461065c919074010000000000000000000000000000000000000000900460ff16611a46565b91505090565b5f8061066c610cf2565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156106985750825b90505f8267ffffffffffffffff1660011480156106b45750303b155b9050811580156106c2575080155b156106f9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561074457845468ff00000000000000001916680100000000000000001785555b5f610751888a018a6117f4565b90506001600160a01b038116610793576040517f7cde9b7200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61079c81610d1a565b6107c260405180602001604052805f81525060405180602001604052805f815250610d2e565b6040516001600160a01b0382169033907fdf5fabff9e49f8c35d69a1f2d0c5e80c933c31cf836cf70de57e3a6e7dc86ebb905f90a37fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc3965050831561086657845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505092915050565b5f5f19610882565b60405180910390fd5b5f61088c85610aa8565b905061089a33858784610d44565b949350505050565b5f5f195f6108af8561096e565b905061089a33858388610d44565b60606108f07f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b6001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa15801561092a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610951919081019061193f565b6040516020016105a29190611a5f565b5f336105d4818585610c63565b5f6105c1826001610af8565b5f8061098583610ab3565b9050808511156109da576040517ffe9cceec0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810186905260448101829052606401610879565b5f6109e4866105de565b90506109f33386868985610db4565b95945050505050565b5f80610a0783610abc565b905080851115610a5c576040517fb94abeec0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810186905260448101829052606401610879565b5f610a66866105b6565b90506109f3338686848a610db4565b5f6040517faf1fbb2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105c1825f610b61565b5f6105c16101f2835b6001600160a01b0381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0060205260408120546105c1565b5f610608610b04610446565b610b0f906001611a90565b610b1a5f600a611b83565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610b469190611a90565b85919085610e53565b610b5c8383836001610e95565b505050565b5f610608610b7082600a611b83565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610b9c9190611a90565b610ba4610446565b610b46906001611a90565b6001600160a01b038381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160209081526040808320938616835292905220545f19811015610c5d5781811015610c4f576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401610879565b610c5d84848484035f610e95565b50505050565b6001600160a01b038316610ca5576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610879565b6001600160a01b038216610ce7576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610879565b610b5c838383610fbe565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006105c1565b610d22611115565b610d2b81611155565b50565b610d36611115565b610d408282611219565b5050565b610d4e848361127c565b610d5883826112b8565b826001600160a01b0316846001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051610da6929190918252602082015260400190565b60405180910390a350505050565b826001600160a01b0316856001600160a01b031614610dd857610dd8838683610baf565b610de28382611305565b610dec8483611352565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051610e44929190918252602082015260400190565b60405180910390a45050505050565b5f610e80610e608361138d565b8015610e7b57505f8480610e7657610e76611b91565b868809115b151590565b610e8b8686866113b9565b6109f39190611a90565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038516610ef8576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610879565b6001600160a01b038416610f3a576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610879565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610fb757836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610fae91815260200190565b60405180910390a35b5050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b03841661100b5781816002015f8282546110009190611a90565b909155506110949050565b6001600160a01b0384165f9081526020829052604090205482811015611076576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810182905260448101849052606401610879565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b0383166110b25760028101805483900390556110d0565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610da691815260200190565b61111d611469565b611153576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b61115d611115565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e005f8061118984611487565b915091508161119957601261119b565b805b83547fffffffffffffffffffffff000000000000000000000000000000000000000000167401000000000000000000000000000000000000000060ff92909216919091027fffffffffffffffffffffffff000000000000000000000000000000000000000016176001600160a01b0394909416939093179091555050565b611221611115565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361126d8482611c21565b5060048101610c5d8382611c21565b610d406112b07f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b833084611540565b6001600160a01b0382166112fa576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610879565b610d405f8383610fbe565b6001600160a01b038216611347576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610879565b610d40825f83610fbe565b610d406113867f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b838361158f565b5f60028260038111156113a2576113a2611ce1565b6113ac9190611cf5565b60ff166001149050919050565b5f805f6113c686866115dd565b91509150815f036113ea578381816113e0576113e0611b91565b0492505050610608565b8184116114015761140160038515026011186115f9565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f611472610cf2565b5468010000000000000000900460ff16919050565b5f805f61149360405190565b6040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce567000000000000000000000000000000000000000000000000000000001790529091505f9081906114fc90879061160a565b509150915061150a83604052565b818015611518575060203d10155b8015611525575060ff8111155b611530575f80611534565b6001815b94509450505050915091565b61154e84848484600161162b565b610c5d576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610879565b61159c83838360016116b1565b610b5c576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610879565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f805f60405f855160208701885afa92505f51915060205190509250925092565b6040517f23b872dd000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038781166004528616602452604485905291602083606481808c5af1925060015f511483166116a0578383151615611694573d5f823e3d81fd5b5f883b113d1516831692505b604052505f60605295945050505050565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000005f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316611720578383151615611714573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215611771575f80fd5b5035919050565b6001600160a01b0381168114610d2b575f80fd5b5f806040838503121561179d575f80fd5b82356117a881611778565b946020939093013593505050565b5f805f606084860312156117c8575f80fd5b83356117d381611778565b925060208401356117e381611778565b929592945050506040919091013590565b5f60208284031215611804575f80fd5b813561060881611778565b5f8060208385031215611820575f80fd5b823567ffffffffffffffff80821115611837575f80fd5b818501915085601f83011261184a575f80fd5b813581811115611858575f80fd5b866020828501011115611869575f80fd5b60209290920196919550909350505050565b5f806040838503121561188c575f80fd5b82359150602083013561189e81611778565b809150509250929050565b5f805f606084860312156118bb575f80fd5b8335925060208401356118cd81611778565b915060408401356118dd81611778565b809150509250925092565b5f80604083850312156118f9575f80fd5b823561190481611778565b9150602083013561189e81611778565b5f60208284031215611924575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561194f575f80fd5b815167ffffffffffffffff80821115611966575f80fd5b818401915084601f830112611979575f80fd5b81518181111561198b5761198b61192b565b604051601f8201601f19908116603f011681019083821181831017156119b3576119b361192b565b816040528281528760208487010111156119cb575f80fd5b8260208601602083015e5f928101602001929092525095945050505050565b5f81518060208401855e5f93019283525090919050565b7f577261707065642000000000000000000000000000000000000000000000000081525f61060860088301846119ea565b634e487b7160e01b5f52601160045260245ffd5b60ff81811683821601908111156105c1576105c1611a32565b7f770000000000000000000000000000000000000000000000000000000000000081525f61060860018301846119ea565b808201808211156105c1576105c1611a32565b600181815b80851115611add57815f1904821115611ac357611ac3611a32565b80851615611ad057918102915b93841c9390800290611aa8565b509250929050565b5f82611af3575060016105c1565b81611aff57505f6105c1565b8160018114611b155760028114611b1f57611b3b565b60019150506105c1565b60ff841115611b3057611b30611a32565b50506001821b6105c1565b5060208310610133831016604e8410600b8410161715611b5e575081810a6105c1565b611b688383611aa3565b805f1904821115611b7b57611b7b611a32565b029392505050565b5f61060860ff841683611ae5565b634e487b7160e01b5f52601260045260245ffd5b600181811c90821680611bb957607f821691505b602082108103611bd757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610b5c57805f5260205f20601f840160051c81016020851015611c025750805b601f840160051c820191505b81811015610fb7575f8155600101611c0e565b815167ffffffffffffffff811115611c3b57611c3b61192b565b611c4f81611c498454611ba5565b84611bdd565b602080601f831160018114611c82575f8415611c6b5750858301515b5f19600386901b1c1916600185901b178555611cd9565b5f85815260208120601f198616915b82811015611cb057888601518255948401946001909101908401611c91565b5085821015611ccd57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52602160045260245ffd5b5f60ff831680611d1357634e487b7160e01b5f52601260045260245ffd5b8060ff8416069150509291505056"; diff --git a/src/generated/candidate/StoxWrappedTokenVaultBeacon.pointers.sol b/src/generated/candidate/StoxWrappedTokenVaultBeacon.pointers.sol index 438a674d..d142710b 100644 --- a/src/generated/candidate/StoxWrappedTokenVaultBeacon.pointers.sol +++ b/src/generated/candidate/StoxWrappedTokenVaultBeacon.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x8e95867e52db417944afd90f3b6c3c980962831e8a944e7f6958ba8f8cc10630); +bytes32 constant BYTECODE_HASH = bytes32(0x448cd06335de9e79ecdc51aa7c6647926860a1976f407de6f79f363b85ccaf2b); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x9FD790f65CA3aF2772358c653F097f0a4c7EE7d2); +address constant DEPLOYED_ADDRESS = address(0xa699659Aab26371e6414D01bCba6986714Ac1063); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"608060405234801561000f575f80fd5b50730d99e0174dbf885ced6ae8deb939b0f890450099738e4bdeec7ceb9570d440676345da1dce10329f5b80610049565b60405180910390fd5b61005281610063565b5061005c826100b2565b5050610130565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b5f036100e75760405163211eb15960e21b81526001600160a01b0382166004820152602401610040565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b61035a8061013d5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063715018a61161004d578063715018a6146100c05780638da5cb5b146100c8578063f2fde38b146100e5575f80fd5b80633659cfe6146100685780635c60da1b1461007d575b5f80fd5b61007b610076366004610320565b6100f8565b005b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61007b61010c565b5f5473ffffffffffffffffffffffffffffffffffffffff16610097565b61007b6100f3366004610320565b61011f565b610100610184565b610109816101d6565b50565b610114610184565b61011d5f6102ac565b565b610127610184565b73ffffffffffffffffffffffffffffffffffffffff811661017b576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b610109816102ac565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461011d576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610172565b8073ffffffffffffffffffffffffffffffffffffffff163b5f0361023e576040517f847ac56400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610172565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610330575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610353575f80fd5b939250505056"; + hex"608060405234801561000f575f80fd5b507309e409fbc6896c4ca7440bd49ba52173ba4cc0cf738e4bdeec7ceb9570d440676345da1dce10329f5b80610049565b60405180910390fd5b61005281610063565b5061005c826100b2565b5050610130565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b5f036100e75760405163211eb15960e21b81526001600160a01b0382166004820152602401610040565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6102d88061013d5f395ff3fe608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063715018a61161004d578063715018a6146100a65780638da5cb5b146100ae578063f2fde38b146100be575f80fd5b80633659cfe6146100685780635c60da1b1461007d575b5f80fd5b61007b6100763660046102ab565b6100d1565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61007b6100e5565b5f546001600160a01b031661008a565b61007b6100cc3660046102ab565b6100f8565b6100d9610150565b6100e281610195565b50565b6100ed610150565b6100f65f610244565b565b610100610150565b6001600160a01b038116610147576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b6100e281610244565b5f546001600160a01b031633146100f6576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161013e565b806001600160a01b03163b5f036101e3576040517f847ac5640000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161013e565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156102bb575f80fd5b81356001600160a01b03811681146102d1575f80fd5b939250505056"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063715018a61161004d578063715018a6146100c05780638da5cb5b146100c8578063f2fde38b146100e5575f80fd5b80633659cfe6146100685780635c60da1b1461007d575b5f80fd5b61007b610076366004610320565b6100f8565b005b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61007b61010c565b5f5473ffffffffffffffffffffffffffffffffffffffff16610097565b61007b6100f3366004610320565b61011f565b610100610184565b610109816101d6565b50565b610114610184565b61011d5f6102ac565b565b610127610184565b73ffffffffffffffffffffffffffffffffffffffff811661017b576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b610109816102ac565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461011d576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610172565b8073ffffffffffffffffffffffffffffffffffffffff163b5f0361023e576040517f847ac56400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610172565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610330575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610353575f80fd5b939250505056"; + hex"608060405234801561000f575f80fd5b5060043610610064575f3560e01c8063715018a61161004d578063715018a6146100a65780638da5cb5b146100ae578063f2fde38b146100be575f80fd5b80633659cfe6146100685780635c60da1b1461007d575b5f80fd5b61007b6100763660046102ab565b6100d1565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61007b6100e5565b5f546001600160a01b031661008a565b61007b6100cc3660046102ab565b6100f8565b6100d9610150565b6100e281610195565b50565b6100ed610150565b6100f65f610244565b565b610100610150565b6001600160a01b038116610147576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b6100e281610244565b5f546001600160a01b031633146100f6576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161013e565b806001600160a01b03163b5f036101e3576040517f847ac5640000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161013e565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156102bb575f80fd5b81356001600160a01b03811681146102d1575f80fd5b939250505056"; diff --git a/src/generated/candidate/StoxWrappedTokenVaultBeaconSetDeployer.pointers.sol b/src/generated/candidate/StoxWrappedTokenVaultBeaconSetDeployer.pointers.sol index 231752f1..cdaac3cd 100644 --- a/src/generated/candidate/StoxWrappedTokenVaultBeaconSetDeployer.pointers.sol +++ b/src/generated/candidate/StoxWrappedTokenVaultBeaconSetDeployer.pointers.sol @@ -10,16 +10,16 @@ pragma solidity ^0.8.25; // file needs the contract to exist so that it can be compiled. /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x940e3ab4278cf7ae44026596f4f32dc5c7f3facd99ef8070c63b5cfefd49a47c); +bytes32 constant BYTECODE_HASH = bytes32(0xffecb06d78a58f60f50c7f90da14c5fe983f5612e2a5deb02446e33766fea7a3); /// @dev The deterministic deploy address of the contract when deployed via /// the Zoltu factory. -address constant DEPLOYED_ADDRESS = address(0x6B4232f1046F1f1bb99a1184D886bBaF3Cd7e15A); +address constant DEPLOYED_ADDRESS = address(0xD0395427938c83D5AC663bE80147fF149acE98e7); /// @dev The creation bytecode of the contract. bytes constant CREATION_CODE = - hex"6080604052348015600e575f80fd5b506109468061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806301ffc9a714610038578063d786858b14610060575b5f80fd5b61004b610046366004610333565b610098565b60405190151581526020015b60405180910390f35b61007361006e366004610379565b610130565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610057565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd786858b00000000000000000000000000000000000000000000000000000000148061012a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff821661017e576040517fe51a7ce200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f739fd790f65ca3af2772358c653f097f0a4c7ee7d26040516101a090610326565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f90820152606001604051809103905ff0801580156101e4573d5f803e3d5ffd5b506040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201529192507f82488d8ab594db2178e4a45b7106aaa804836e608f001b5d7fcb6c3514730b3e910160405180910390a16040805173ffffffffffffffffffffffffffffffffffffffff85811660208301527fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc3929084169163439fab9191016040516020818303038152906040526040518263ffffffff1660e01b81526004016102af91906103ac565b6020604051808303815f875af11580156102cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ef91906103ff565b1461012a576040517f09c5931500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052f8061041783390190565b5f60208284031215610343575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610372575f80fd5b9392505050565b5f60208284031215610389575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610372575f80fd5b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f6020828403121561040f575f80fd5b505191905056fe60a060405260405161052f38038061052f83398101604081905261002291610331565b61002c828261003e565b506001600160a01b031660805261040d565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906103ed565b82610209565b505050565b6100f76102aa565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d291906103ed565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f61021684846102cb565b905080801561023757505f3d118061023757505f846001600160a01b03163b115b1561024c576102446102de565b9150506102a4565b801561027657604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b3d15610289576102846102f7565b6102a2565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156102c95760405163b398979f60e01b815260040160405180910390fd5b565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b80516001600160a01b0381168114610318575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610342575f80fd5b61034b83610302565b60208401519092506001600160401b0380821115610367575f80fd5b818501915085601f83011261037a575f80fd5b81518181111561038c5761038c61031d565b604051601f8201601f19908116603f011681019083821181831017156103b4576103b461031d565b816040528281528860208487010111156103cc575f80fd5b8260208601602083015e5f6020848301015280955050505050509250929050565b5f602082840312156103fd575f80fd5b61040682610302565b9392505050565b60805161010b6104245f395f6023015261010b5ff3fe608060405261000c61000e565b005b61001e610019610020565b6100b3565b565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ae91906100d1565b905090565b365f80375f80365f845af43d5f803e8080156100cd573d5ff35b3d5ffd5b5f602082840312156100e1575f80fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610104575f80fd5b939250505056"; + hex"6080604052348015600e575f80fd5b506109468061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c806301ffc9a714610038578063d786858b14610060575b5f80fd5b61004b610046366004610333565b610098565b60405190151581526020015b60405180910390f35b61007361006e366004610379565b610130565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610057565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd786858b00000000000000000000000000000000000000000000000000000000148061012a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff821661017e576040517fe51a7ce200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73a699659aab26371e6414d01bcba6986714ac10636040516101a090610326565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f90820152606001604051809103905ff0801580156101e4573d5f803e3d5ffd5b506040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201529192507f82488d8ab594db2178e4a45b7106aaa804836e608f001b5d7fcb6c3514730b3e910160405180910390a16040805173ffffffffffffffffffffffffffffffffffffffff85811660208301527fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc3929084169163439fab9191016040516020818303038152906040526040518263ffffffff1660e01b81526004016102af91906103ac565b6020604051808303815f875af11580156102cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ef91906103ff565b1461012a576040517f09c5931500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052f8061041783390190565b5f60208284031215610343575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610372575f80fd5b9392505050565b5f60208284031215610389575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610372575f80fd5b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f6020828403121561040f575f80fd5b505191905056fe60a060405260405161052f38038061052f83398101604081905261002291610331565b61002c828261003e565b506001600160a01b031660805261040d565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906103ed565b82610209565b505050565b6100f76102aa565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d291906103ed565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f61021684846102cb565b905080801561023757505f3d118061023757505f846001600160a01b03163b115b1561024c576102446102de565b9150506102a4565b801561027657604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b3d15610289576102846102f7565b6102a2565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156102c95760405163b398979f60e01b815260040160405180910390fd5b565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b80516001600160a01b0381168114610318575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610342575f80fd5b61034b83610302565b60208401519092506001600160401b0380821115610367575f80fd5b818501915085601f83011261037a575f80fd5b81518181111561038c5761038c61031d565b604051601f8201601f19908116603f011681019083821181831017156103b4576103b461031d565b816040528281528860208487010111156103cc575f80fd5b8260208601602083015e5f6020848301015280955050505050509250929050565b5f602082840312156103fd575f80fd5b61040682610302565b9392505050565b60805161010b6104245f395f6023015261010b5ff3fe608060405261000c61000e565b005b61001e610019610020565b6100b3565b565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ae91906100d1565b905090565b365f80375f80365f845af43d5f803e8080156100cd573d5ff35b3d5ffd5b5f602082840312156100e1575f80fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610104575f80fd5b939250505056"; /// @dev The runtime bytecode of the contract. bytes constant RUNTIME_CODE = - hex"608060405234801561000f575f80fd5b5060043610610034575f3560e01c806301ffc9a714610038578063d786858b14610060575b5f80fd5b61004b610046366004610333565b610098565b60405190151581526020015b60405180910390f35b61007361006e366004610379565b610130565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610057565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd786858b00000000000000000000000000000000000000000000000000000000148061012a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff821661017e576040517fe51a7ce200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f739fd790f65ca3af2772358c653f097f0a4c7ee7d26040516101a090610326565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f90820152606001604051809103905ff0801580156101e4573d5f803e3d5ffd5b506040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201529192507f82488d8ab594db2178e4a45b7106aaa804836e608f001b5d7fcb6c3514730b3e910160405180910390a16040805173ffffffffffffffffffffffffffffffffffffffff85811660208301527fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc3929084169163439fab9191016040516020818303038152906040526040518263ffffffff1660e01b81526004016102af91906103ac565b6020604051808303815f875af11580156102cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ef91906103ff565b1461012a576040517f09c5931500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052f8061041783390190565b5f60208284031215610343575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610372575f80fd5b9392505050565b5f60208284031215610389575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610372575f80fd5b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f6020828403121561040f575f80fd5b505191905056fe60a060405260405161052f38038061052f83398101604081905261002291610331565b61002c828261003e565b506001600160a01b031660805261040d565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906103ed565b82610209565b505050565b6100f76102aa565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d291906103ed565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f61021684846102cb565b905080801561023757505f3d118061023757505f846001600160a01b03163b115b1561024c576102446102de565b9150506102a4565b801561027657604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b3d15610289576102846102f7565b6102a2565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156102c95760405163b398979f60e01b815260040160405180910390fd5b565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b80516001600160a01b0381168114610318575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610342575f80fd5b61034b83610302565b60208401519092506001600160401b0380821115610367575f80fd5b818501915085601f83011261037a575f80fd5b81518181111561038c5761038c61031d565b604051601f8201601f19908116603f011681019083821181831017156103b4576103b461031d565b816040528281528860208487010111156103cc575f80fd5b8260208601602083015e5f6020848301015280955050505050509250929050565b5f602082840312156103fd575f80fd5b61040682610302565b9392505050565b60805161010b6104245f395f6023015261010b5ff3fe608060405261000c61000e565b005b61001e610019610020565b6100b3565b565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ae91906100d1565b905090565b365f80375f80365f845af43d5f803e8080156100cd573d5ff35b3d5ffd5b5f602082840312156100e1575f80fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610104575f80fd5b939250505056"; + hex"608060405234801561000f575f80fd5b5060043610610034575f3560e01c806301ffc9a714610038578063d786858b14610060575b5f80fd5b61004b610046366004610333565b610098565b60405190151581526020015b60405180910390f35b61007361006e366004610379565b610130565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610057565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd786858b00000000000000000000000000000000000000000000000000000000148061012a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff821661017e576040517fe51a7ce200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73a699659aab26371e6414d01bcba6986714ac10636040516101a090610326565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f90820152606001604051809103905ff0801580156101e4573d5f803e3d5ffd5b506040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201529192507f82488d8ab594db2178e4a45b7106aaa804836e608f001b5d7fcb6c3514730b3e910160405180910390a16040805173ffffffffffffffffffffffffffffffffffffffff85811660208301527fe0e57eda3f08f2a93bbe980d3df7f9c315eac41181f58b865a13d917fe769fc3929084169163439fab9191016040516020818303038152906040526040518263ffffffff1660e01b81526004016102af91906103ac565b6020604051808303815f875af11580156102cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ef91906103ff565b1461012a576040517f09c5931500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61052f8061041783390190565b5f60208284031215610343575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610372575f80fd5b9392505050565b5f60208284031215610389575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610372575f80fd5b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f6020828403121561040f575f80fd5b505191905056fe60a060405260405161052f38038061052f83398101604081905261002291610331565b61002c828261003e565b506001600160a01b031660805261040d565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906103ed565b82610209565b505050565b6100f76102aa565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d291906103ed565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f61021684846102cb565b905080801561023757505f3d118061023757505f846001600160a01b03163b115b1561024c576102446102de565b9150506102a4565b801561027657604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b3d15610289576102846102f7565b6102a2565b60405163d6bda27560e01b815260040160405180910390fd5b505b92915050565b34156102c95760405163b398979f60e01b815260040160405180910390fd5b565b5f805f835160208501865af49392505050565b6040513d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b80516001600160a01b0381168114610318575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610342575f80fd5b61034b83610302565b60208401519092506001600160401b0380821115610367575f80fd5b818501915085601f83011261037a575f80fd5b81518181111561038c5761038c61031d565b604051601f8201601f19908116603f011681019083821181831017156103b4576103b461031d565b816040528281528860208487010111156103cc575f80fd5b8260208601602083015e5f6020848301015280955050505050509250929050565b5f602082840312156103fd575f80fd5b61040682610302565b9392505050565b60805161010b6104245f395f6023015261010b5ff3fe608060405261000c61000e565b005b61001e610019610020565b6100b3565b565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561008a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ae91906100d1565b905090565b365f80375f80365f845af43d5f803e8080156100cd573d5ff35b3d5ffd5b5f602082840312156100e1575f80fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610104575f80fd5b939250505056"; diff --git a/src/lib/LibERC20Storage.sol b/src/lib/LibERC20Storage.sol index 3a74a0cf..b3ba0ff1 100644 --- a/src/lib/LibERC20Storage.sol +++ b/src/lib/LibERC20Storage.sol @@ -9,6 +9,12 @@ pragma solidity ^0.8.25; bytes32 constant ERC20_STORAGE_LOCATION = keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.ERC20")) - 1)) & ~bytes32(uint256(0xff)); +/// @dev The slot holding OZ's raw `_totalSupply`: offset 2 from the ERC-7201 +/// root, per the `ERC20Upgradeable` struct layout documented on +/// `LibERC20Storage`. Every read and write of the accumulator goes through +/// this constant. +bytes32 constant ERC20_TOTAL_SUPPLY_SLOT = bytes32(uint256(ERC20_STORAGE_LOCATION) + 2); + /// @title LibERC20Storage /// @notice Direct storage access to OpenZeppelin ERC20Upgradeable internals. /// Used by the rebase migration system to write balances and totalSupply @@ -69,11 +75,55 @@ library LibERC20Storage { /// otherwise-derived supply figure must compute it themselves. /// @return The raw value of OZ's `_totalSupply`. function underlyingTotalSupply() internal view returns (uint256) { - bytes32 slot = ERC20_STORAGE_LOCATION; + bytes32 slot = ERC20_TOTAL_SUPPLY_SLOT; uint256 supply; assembly ("memory-safe") { - supply := sload(add(slot, 2)) + supply := sload(slot) } return supply; } + + /// @notice Write the raw underlying `_totalSupply` at OZ's ERC-7201 slot. + /// Bypasses OZ's `_update` entirely — no `Transfer` event, no balance + /// adjustment. + /// + /// @dev This slot is NOT the reported supply: `StoxReceiptVault.totalSupply()` + /// is the rebase-aware `LibTotalSupply.effectiveTotalSupply()`. Writing + /// here keeps OZ's internals self-consistent and does not change what the + /// token reports. + /// + /// @param newTotalSupply The new value to write to `_totalSupply`. + function setUnderlyingTotalSupply(uint256 newTotalSupply) internal { + bytes32 slot = ERC20_TOTAL_SUPPLY_SLOT; + assembly ("memory-safe") { + sstore(slot, newTotalSupply) + } + } + + /// @notice Shift OZ's raw `_totalSupply` by the delta a rebase applied to + /// one account's balance, preserving OZ's own `_totalSupply == Σ _balances` + /// invariant. + /// + /// @dev The lazy rebase migration rewrites `_balances` behind OZ's back. + /// OZ's `_update` still subtracts from the raw slot **unchecked** on burn + /// and adds to it **checked** on mint, so a slot left stale by a rebase + /// drifts below the true balance sum, wraps to ~`2**256` on the first burn + /// that exceeds it, and from then on reverts every mint with `Panic(0x11)` + /// — silently, because `totalSupply()`, `balanceOf()` and all events keep + /// agreeing with each other. The slot has no write path other than + /// mint/burn, so recovery would need a beacon implementation upgrade. + /// See `StoxReceiptVaultRawTotalSupplyTest` (Protofire H01). + /// + /// Arithmetic is checked. `supply >= oldBalance` always holds (the account's + /// balance is one of the summands of the supply), so the only reachable + /// revert is an overflow on `supply + newBalance`, which means the split + /// multiplier has pushed supply past `uint256` — `LibRebaseMath` would + /// already have hit that on the individual balance, and failing closed is + /// the correct outcome. + /// + /// @param oldBalance The account's stored balance before rasterization. + /// @param newBalance The account's stored balance after rasterization. + function applyBalanceDeltaToTotalSupply(uint256 oldBalance, uint256 newBalance) internal { + setUnderlyingTotalSupply(underlyingTotalSupply() + newBalance - oldBalance); + } } diff --git a/test/script/20260619-deploy-v4-authoriser-clone.t.sol b/test/script/20260619-deploy-v4-authoriser-clone.t.sol index ec12dfae..b01cfc96 100644 --- a/test/script/20260619-deploy-v4-authoriser-clone.t.sol +++ b/test/script/20260619-deploy-v4-authoriser-clone.t.sol @@ -24,9 +24,6 @@ import { ExpectedGrantMissing, CloneCodehashMismatch } from "../../script/20260619-deploy-v4-authoriser-clone.s.sol"; -import { - StoxOffchainAssetReceiptVaultAuthorizerV1 -} from "../../src/concrete/authorize/StoxOffchainAssetReceiptVaultAuthorizerV1.sol"; import {LibAuthoriserInvariants, RoleGrant} from "../../src/lib/LibAuthoriserInvariants.sol"; import {LibProdDeployV4} from "../../src/generated/LibProdDeployV4.sol"; import {LibSafeInvariants} from "../../src/lib/LibSafeInvariants.sol"; @@ -43,9 +40,16 @@ import {DeployV4AuthoriserCloneHarness} from "./DeployV4AuthoriserCloneHarness.s /// /// @dev The V4 impl has not yet been Zoltu-deployed on Base at the time this /// script lands. Each test etches the V4 impl runtime bytecode at the pinned -/// address so the impl pre-flight passes; the runtime is captured from a -/// freshly-compiled `StoxOffchainAssetReceiptVaultAuthorizerV1`, whose -/// codehash matches the `LibProdDeployV4` pin by construction. +/// address so the impl pre-flight passes; the runtime is the FROZEN +/// `RUNTIME_CODE_0_1_1` snapshot, which is what the script's +/// `assertV4ImplDeployed` codehash guard checks against. +/// +/// It deliberately does NOT compile the contract fresh. That worked only while +/// current source happened to reproduce the 0.1.1 bytecode byte-for-byte; the +/// moment anything shifts the compiled output — a dependency bump, or the +/// `optimizer_runs` change in this release — a fresh compile stops matching the +/// frozen pin and these tests fail on the impl guard instead of the behaviour +/// they are actually asserting. contract DeployV4AuthoriserCloneTest is Test { DeployV4AuthoriserClone internal script; DeployV4AuthoriserCloneHarness internal harness; @@ -65,8 +69,7 @@ contract DeployV4AuthoriserCloneTest is Test { v4Impl = LibProdDeployV4.STOX_OFFCHAIN_ASSET_RECEIPT_VAULT_AUTHORIZER_V1_0_1_1; cloneFactory = LibCloneFactoryDeploy.CLONE_FACTORY_DEPLOYED_ADDRESS; - StoxOffchainAssetReceiptVaultAuthorizerV1 impl = new StoxOffchainAssetReceiptVaultAuthorizerV1(); - v4ImplRuntime = address(impl).code; + v4ImplRuntime = LibProdDeployV4.STOX_OFFCHAIN_ASSET_RECEIPT_VAULT_AUTHORIZER_V1_RUNTIME_CODE_0_1_1; vm.etch(v4Impl, v4ImplRuntime); } diff --git a/test/src/concrete/StoxReceiptVault.rawTotalSupply.t.sol b/test/src/concrete/StoxReceiptVault.rawTotalSupply.t.sol new file mode 100644 index 00000000..deabd55e --- /dev/null +++ b/test/src/concrete/StoxReceiptVault.rawTotalSupply.t.sol @@ -0,0 +1,173 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity =0.8.25; + +import {Test} from "forge-std-1.16.1/src/Test.sol"; +import {LibDecimalFloat} from "rain-math-float-0.1.1/src/lib/LibDecimalFloat.sol"; +import {ACTION_TYPE_STOCK_SPLIT_V1} from "../../../src/interface/ICorporateActionsV1.sol"; +import {LibStockSplit} from "../../../src/lib/LibStockSplit.sol"; +import {TestStoxReceiptVault} from "./TestStoxReceiptVault.sol"; + +/// Regression guards for Protofire H01 (report `st0x.deploy 5.0`, July 2026, +/// audited at `ed767bf2`): "Raw OZ `_totalSupply` can block minting". +/// +/// A stock split rewrites holder balances directly through +/// `LibERC20Storage.setUnderlyingBalance`, bypassing `_mint` / `_burn`. Before +/// the fix, OZ's own `_totalSupply` accumulator was never adjusted to match, so +/// it drifted below the true sum of balances. OZ subtracts from that +/// accumulator **unchecked** on burn and adds to it **checked** on mint, so the +/// drift eventually wrapped the slot to ~2**256 and every subsequent mint +/// reverted with `Panic(0x11)` — while `totalSupply()`, `balanceOf()` and all +/// events kept reporting correct, mutually consistent values. +/// +/// The invariant these tests pin is OZ's own: +/// +/// `_totalSupply == Σ _balances` +/// +/// which is a *different* quantity from the rebase-aware `totalSupply()`. +/// During partial migration the raw slot tracks the sum of *stored* balances +/// while `totalSupply()` projects unmigrated pots forward through every +/// completed multiplier; the two converge once every holder has migrated. +contract StoxReceiptVaultRawTotalSupplyTest is Test { + TestStoxReceiptVault internal vault; + + address internal constant ALICE = address(0xA11CE); + address internal constant BOB = address(0xB0B); + + function setUp() public { + vault = new TestStoxReceiptVault(); + vm.warp(1000); + } + + function _splitParams(int256 multiplier) internal pure returns (bytes memory) { + return LibStockSplit.encodeParametersV1(LibDecimalFloat.packLossless(multiplier, 0)); + } + + /// The exact scenario tabulated in the H01 finding. + /// + /// Alice mints 1000, a 2x split completes, Alice redeems 1002. Before the + /// fix the raw slot went `1000 - 1002` and wrapped to `2**256 - 2`. + function testH01RedeemAcrossSplitDoesNotWrapRawTotalSupply() external { + vault.publicUpdate(address(0), ALICE, 1000); + assertEq(vault.rawTotalSupply(), 1000, "raw slot tracks the mint"); + + vault.publicSchedule(ACTION_TYPE_STOCK_SPLIT_V1, 1500, _splitParams(2)); + vm.warp(2000); + + assertEq(vault.balanceOf(ALICE), 2000, "2x split doubles Alice's balance"); + assertEq(vault.totalSupply(), 2000, "rebase-aware supply doubles too"); + + // Redeem more than the pre-split supply. This is the step that + // underflowed OZ's accumulator before the fix. + vault.publicUpdate(ALICE, address(0), 1002); + + assertEq(vault.balanceOf(ALICE), 998, "Alice keeps 2000 - 1002"); + assertEq(vault.totalSupply(), 998, "reported supply follows"); + assertEq(vault.rawTotalSupply(), 998, "raw OZ slot must not wrap"); + assertEq(vault.rawTotalSupply(), vault.rawStoredBalance(ALICE), "OZ invariant: _totalSupply == sum of balances"); + } + + /// The impact the finding describes: after the wrap, new issuance is + /// permanently capped because OZ's mint path adds to the raw slot with + /// overflow checks enabled. Post-fix, minting after the redeem is + /// unremarkable. + function testH01MintAfterRedeemAcrossSplitStillSucceeds() external { + vault.publicUpdate(address(0), ALICE, 1000); + vault.publicSchedule(ACTION_TYPE_STOCK_SPLIT_V1, 1500, _splitParams(2)); + vm.warp(2000); + vault.publicUpdate(ALICE, address(0), 1002); + + // Pre-fix this reverted with Panic(0x11) — arithmetic overflow — because + // the raw slot sat at 2**256 - 2. + vault.publicUpdate(address(0), BOB, 500); + + assertEq(vault.balanceOf(BOB), 500, "Bob receives exactly the minted amount"); + assertEq(vault.totalSupply(), 1498, "998 + 500"); + assertEq(vault.rawTotalSupply(), 1498, "raw slot keeps pace with the mint"); + assertEq( + vault.rawTotalSupply(), + vault.rawStoredBalance(ALICE) + vault.rawStoredBalance(BOB), + "OZ invariant holds across both holders" + ); + } + + /// A reverse split shrinks balances; the raw slot must follow downward + /// rather than stranding the difference. + function testRawTotalSupplyFollowsReverseSplit() external { + vault.publicUpdate(address(0), ALICE, 1000); + + // 1-for-2 reverse split. + vault.publicSchedule( + ACTION_TYPE_STOCK_SPLIT_V1, + 1500, + LibStockSplit.encodeParametersV1( + LibDecimalFloat.div(LibDecimalFloat.packLossless(1, 0), LibDecimalFloat.packLossless(2, 0)) + ) + ); + vm.warp(2000); + + // Touch Alice so the lazy migration actually runs. + vault.publicUpdate(ALICE, BOB, 100); + + assertEq( + vault.rawTotalSupply(), + vault.rawStoredBalance(ALICE) + vault.rawStoredBalance(BOB), + "OZ invariant holds after a reverse split" + ); + } + + /// Migration is lazy, so the raw slot must stay consistent with the sum of + /// *stored* balances at every step, including while some holders are still + /// unmigrated. + function testRawTotalSupplyMatchesStoredBalancesDuringPartialMigration() external { + vault.publicUpdate(address(0), ALICE, 1000); + vault.publicUpdate(address(0), BOB, 400); + + vault.publicSchedule(ACTION_TYPE_STOCK_SPLIT_V1, 1500, _splitParams(3)); + vm.warp(2000); + + // Touch Alice only — Bob stays unmigrated. + vault.publicUpdate(ALICE, address(0), 1); + + assertEq( + vault.rawTotalSupply(), + vault.rawStoredBalance(ALICE) + vault.rawStoredBalance(BOB), + "OZ invariant holds mid-migration" + ); + + // Now migrate Bob too. + vault.publicUpdate(BOB, address(0), 1); + + assertEq( + vault.rawTotalSupply(), + vault.rawStoredBalance(ALICE) + vault.rawStoredBalance(BOB), + "OZ invariant holds once fully migrated" + ); + assertEq(vault.totalSupply(), vault.rawTotalSupply(), "supplies converge after full migration"); + } + + /// Fuzz the whole shape: arbitrary holdings, an arbitrary integer split and + /// an arbitrary burn must never break OZ's accumulator invariant. + function testFuzzRawTotalSupplyInvariantAcrossSplitAndBurn(uint64 aliceAmount, uint64 bobAmount, uint8 multiplier) + external + { + aliceAmount = uint64(bound(aliceAmount, 1, type(uint64).max)); + bobAmount = uint64(bound(bobAmount, 1, type(uint64).max)); + multiplier = uint8(bound(multiplier, 1, 10)); + + vault.publicUpdate(address(0), ALICE, aliceAmount); + vault.publicUpdate(address(0), BOB, bobAmount); + + vault.publicSchedule(ACTION_TYPE_STOCK_SPLIT_V1, 1500, _splitParams(int256(uint256(multiplier)))); + vm.warp(2000); + + // Burn everything Alice holds post-split. + vault.publicUpdate(ALICE, address(0), vault.balanceOf(ALICE)); + + assertEq( + vault.rawTotalSupply(), + vault.rawStoredBalance(ALICE) + vault.rawStoredBalance(BOB), + "OZ invariant survives an arbitrary split then burn" + ); + } +} diff --git a/test/src/concrete/TestStoxReceiptVault.sol b/test/src/concrete/TestStoxReceiptVault.sol index edbed5fa..4311cc6c 100644 --- a/test/src/concrete/TestStoxReceiptVault.sol +++ b/test/src/concrete/TestStoxReceiptVault.sol @@ -63,6 +63,14 @@ contract TestStoxReceiptVault is StoxReceiptVault { return LibERC20Storage.underlyingBalance(account); } + /// Expose OZ's raw `_totalSupply` slot. `totalSupply()` is overridden to + /// the rebase-aware `LibTotalSupply.effectiveTotalSupply()`, so this is the + /// only way a test can observe the underlying OZ accumulator that + /// `ERC20Upgradeable._update` mutates. + function rawTotalSupply() external view returns (uint256) { + return LibERC20Storage.underlyingTotalSupply(); + } + function migrationCursor(address account) external view returns (uint256) { return LibCorporateAction.getStorage().accountMigrationCursor[account]; } diff --git a/test/src/concrete/upgrade/V3UpgradeShadowFork.t.sol b/test/src/concrete/upgrade/V3UpgradeShadowFork.t.sol index d58c07f7..672e4095 100644 --- a/test/src/concrete/upgrade/V3UpgradeShadowFork.t.sol +++ b/test/src/concrete/upgrade/V3UpgradeShadowFork.t.sol @@ -9,6 +9,7 @@ import {IERC20Metadata} from "@openzeppelin-contracts-5.6.1/token/ERC20/extensio import {LibProdDeployV1} from "../../../../src/lib/LibProdDeployV1.sol"; import {LibProdDeployV4} from "../../../../src/generated/LibProdDeployV4.sol"; +import {LibProdDeployCurrent} from "../../../../src/generated/LibProdDeployCurrent.sol"; import {LibBeaconInvariants} from "../../../../src/lib/LibBeaconInvariants.sol"; import {LibSafeInvariants} from "../../../../src/lib/LibSafeInvariants.sol"; import {LibTokenInvariants} from "../../../../src/lib/LibTokenInvariants.sol"; @@ -79,9 +80,17 @@ contract V3UpgradeShadowForkTest is Test { // constructors there so the facet's `_SELF` and the vault's pinned // facet target line up. deployCodeTo("src/concrete/StoxReceiptVault.sol:StoxReceiptVault", LibProdDeployV4.STOX_RECEIPT_VAULT_0_1_1); + // Plant the facet at the address the freshly-compiled vault actually + // pins, not at a hardcoded tag constant. The vault bakes + // `LibProdDeployCurrent.STOX_CORPORATE_ACTIONS_FACET` into its + // `fallback()`, so the two only line up if this address is read from + // the same source. They coincided while the facet's bytecode was + // unchanged since 0.1.1; lowering `optimizer_runs` moved the candidate + // facet address and the mismatch surfaced as a bare delegatecall + // revert into empty code. deployCodeTo( "src/concrete/StoxCorporateActionsFacet.sol:StoxCorporateActionsFacet", - LibProdDeployV4.STOX_CORPORATE_ACTIONS_FACET_0_1_1 + LibProdDeployCurrent.STOX_CORPORATE_ACTIONS_FACET ); // 2. The beacon-ownership migration EXECUTED on Base (2026-07): diff --git a/test/src/lib/LibERC20Storage.t.sol b/test/src/lib/LibERC20Storage.t.sol index fd02f4ba..4cb548a1 100644 --- a/test/src/lib/LibERC20Storage.t.sol +++ b/test/src/lib/LibERC20Storage.t.sol @@ -106,6 +106,37 @@ contract LibERC20StorageTest is Test { assertEq(token.libBalanceOf(b), uint256(amountB), "Lib read of b untouched"); } + /// LibERC20Storage.setUnderlyingTotalSupply writes a value that + /// ERC20Upgradeable.totalSupply observes. Pins the `+2` offset in the write + /// direction — `underlyingTotalSupply` alone only pins it for reads. + function testSetTotalSupplyVisibleToOzTotalSupply() external { + token.mint(ALICE, 100); + token.libSetTotalSupply(999); + assertEq(token.totalSupply(), 999, "OZ totalSupply must reflect the direct write"); + assertEq(token.libTotalSupply(), 999, "Lib read must match Lib write"); + } + + /// Writing `_totalSupply` must not disturb any `_balances` slot — i.e. the + /// `+2` offset really is a distinct slot from the balances mapping base. + function testSetTotalSupplyLeavesBalancesUntouched() external { + token.mint(ALICE, 100); + token.mint(BOB, 200); + token.libSetTotalSupply(12345); + assertEq(token.balanceOf(ALICE), 100, "Alice's balance untouched"); + assertEq(token.balanceOf(BOB), 200, "Bob's balance untouched"); + assertEq(token.totalSupply(), 12345, "only totalSupply moved"); + } + + /// Round trip: write via OZ, read via Lib, write via Lib, read via OZ. + function testFuzzTotalSupplyRoundTrip(uint128 mintAmount, uint256 directWrite) external { + token.mint(ALICE, uint256(mintAmount)); + assertEq(token.libTotalSupply(), token.totalSupply()); + + token.libSetTotalSupply(directWrite); + assertEq(token.totalSupply(), directWrite, "OZ must reflect Lib write"); + assertEq(token.libTotalSupply(), directWrite, "Lib read must match Lib write"); + } + /// Fuzz: totalSupply reflects multiple mints across randomized accounts. function testFuzzTotalSupplyMultipleAccounts(address a, address b, uint64 amountA, uint64 amountB) external { vm.assume(a != address(0) && b != address(0)); diff --git a/test/src/lib/LibProdDeployV4.t.sol b/test/src/lib/LibProdDeployV4.t.sol index 454f54dc..00b564dd 100644 --- a/test/src/lib/LibProdDeployV4.t.sol +++ b/test/src/lib/LibProdDeployV4.t.sol @@ -58,9 +58,9 @@ contract LibProdDeployV4Test is Test { function testDeployAddressStoxReceipt() external { LibRainDeploy.etchZoltuFactory(vm); address deployed = LibRainDeploy.deployZoltu(type(StoxReceipt).creationCode); - assertEq(deployed, LibProdDeployV4.STOX_RECEIPT_0_1_1); + assertEq(deployed, LibProdDeployV4.STOX_RECEIPT_CANDIDATE); assertTrue(deployed.code.length > 0); - assertEq(deployed.codehash, LibProdDeployV4.STOX_RECEIPT_CODEHASH_0_1_1); + assertEq(deployed.codehash, LibProdDeployV4.STOX_RECEIPT_CODEHASH_CANDIDATE); } // --- StoxReceiptVault (candidate — rebuilt: its `fallback()` hardcodes the @@ -79,9 +79,9 @@ contract LibProdDeployV4Test is Test { function testDeployAddressStoxWrappedTokenVault() external { LibRainDeploy.etchZoltuFactory(vm); address deployed = LibRainDeploy.deployZoltu(type(StoxWrappedTokenVault).creationCode); - assertEq(deployed, LibProdDeployV4.STOX_WRAPPED_TOKEN_VAULT_0_1_1); + assertEq(deployed, LibProdDeployV4.STOX_WRAPPED_TOKEN_VAULT_CANDIDATE); assertTrue(deployed.code.length > 0); - assertEq(deployed.codehash, LibProdDeployV4.STOX_WRAPPED_TOKEN_VAULT_CODEHASH_0_1_1); + assertEq(deployed.codehash, LibProdDeployV4.STOX_WRAPPED_TOKEN_VAULT_CODEHASH_CANDIDATE); } // --- StoxUnifiedDeployer (candidate — rebuilt: it embeds the rebuilt candidate @@ -101,9 +101,9 @@ contract LibProdDeployV4Test is Test { LibRainDeploy.etchZoltuFactory(vm); LibRainDeploy.deployZoltu(type(StoxWrappedTokenVault).creationCode); address deployed = LibRainDeploy.deployZoltu(type(StoxWrappedTokenVaultBeacon).creationCode); - assertEq(deployed, LibProdDeployV4.STOX_WRAPPED_TOKEN_VAULT_BEACON_0_1_1); + assertEq(deployed, LibProdDeployV4.STOX_WRAPPED_TOKEN_VAULT_BEACON_CANDIDATE); assertTrue(deployed.code.length > 0); - assertEq(deployed.codehash, LibProdDeployV4.STOX_WRAPPED_TOKEN_VAULT_BEACON_CODEHASH_0_1_1); + assertEq(deployed.codehash, LibProdDeployV4.STOX_WRAPPED_TOKEN_VAULT_BEACON_CODEHASH_CANDIDATE); } // --- StoxWrappedTokenVaultBeaconSetDeployer (candidate — a mover: its @@ -145,9 +145,9 @@ contract LibProdDeployV4Test is Test { function testDeployAddressStoxOffchainAssetReceiptVaultAuthorizerV1() external { LibRainDeploy.etchZoltuFactory(vm); address deployed = LibRainDeploy.deployZoltu(type(StoxOffchainAssetReceiptVaultAuthorizerV1).creationCode); - assertEq(deployed, LibProdDeployV4.STOX_OFFCHAIN_ASSET_RECEIPT_VAULT_AUTHORIZER_V1_0_1_1); + assertEq(deployed, LibProdDeployV4.STOX_OFFCHAIN_ASSET_RECEIPT_VAULT_AUTHORIZER_V1_CANDIDATE); assertTrue(deployed.code.length > 0); - assertEq(deployed.codehash, LibProdDeployV4.STOX_OFFCHAIN_ASSET_RECEIPT_VAULT_AUTHORIZER_V1_CODEHASH_0_1_1); + assertEq(deployed.codehash, LibProdDeployV4.STOX_OFFCHAIN_ASSET_RECEIPT_VAULT_AUTHORIZER_V1_CODEHASH_CANDIDATE); } // --- StoxOffchainAssetReceiptVaultPaymentMintAuthorizerV1 --- @@ -156,11 +156,11 @@ contract LibProdDeployV4Test is Test { LibRainDeploy.etchZoltuFactory(vm); address deployed = LibRainDeploy.deployZoltu(type(StoxOffchainAssetReceiptVaultPaymentMintAuthorizerV1).creationCode); - assertEq(deployed, LibProdDeployV4.STOX_OFFCHAIN_ASSET_RECEIPT_VAULT_PAYMENT_MINT_AUTHORIZER_V1_0_1_1); + assertEq(deployed, LibProdDeployV4.STOX_OFFCHAIN_ASSET_RECEIPT_VAULT_PAYMENT_MINT_AUTHORIZER_V1_CANDIDATE); assertTrue(deployed.code.length > 0); assertEq( deployed.codehash, - LibProdDeployV4.STOX_OFFCHAIN_ASSET_RECEIPT_VAULT_PAYMENT_MINT_AUTHORIZER_V1_CODEHASH_0_1_1 + LibProdDeployV4.STOX_OFFCHAIN_ASSET_RECEIPT_VAULT_PAYMENT_MINT_AUTHORIZER_V1_CODEHASH_CANDIDATE ); } diff --git a/test/src/lib/LibTotalSupplyHarness.sol b/test/src/lib/LibTotalSupplyHarness.sol index 26a4d96b..6c5d5aac 100644 --- a/test/src/lib/LibTotalSupplyHarness.sol +++ b/test/src/lib/LibTotalSupplyHarness.sol @@ -4,7 +4,7 @@ pragma solidity =0.8.25; import {LibTotalSupply} from "src/lib/LibTotalSupply.sol"; import {LibCorporateAction} from "src/lib/LibCorporateAction.sol"; -import {ERC20_STORAGE_LOCATION} from "src/lib/LibERC20Storage.sol"; +import {LibERC20Storage} from "src/lib/LibERC20Storage.sol"; contract LibTotalSupplyHarness { function schedule(uint256 actionType, uint64 effectiveTime, bytes memory parameters) external returns (uint256) { @@ -37,18 +37,10 @@ contract LibTotalSupplyHarness { LibTotalSupply.onBurn(amount); } - /// @dev Test-only helper: write directly to OZ's `_totalSupply` slot to - /// seed the harness with a starting totalSupply. `LibERC20Storage` no - /// longer exposes a setter (production code must not write this slot — - /// `LibTotalSupply` per-cursor pots own the effective supply), so we do - /// the slot write inline here. + /// @dev Test-only helper: seed the harness with a starting totalSupply by + /// writing OZ's `_totalSupply` slot through the library setter. function setOzTotalSupply(uint256 supply) external { - // Bind to a local — inline assembly only accepts literal number - // constants, and `ERC20_STORAGE_LOCATION` is now derived in-source. - bytes32 slot = ERC20_STORAGE_LOCATION; - assembly ("memory-safe") { - sstore(add(slot, 2), supply) - } + LibERC20Storage.setUnderlyingTotalSupply(supply); } function unmigrated(uint256 cursor) external view returns (uint256) { diff --git a/test/src/lib/TestERC20.sol b/test/src/lib/TestERC20.sol index 5ec61072..b1e7f3b8 100644 --- a/test/src/lib/TestERC20.sol +++ b/test/src/lib/TestERC20.sol @@ -34,4 +34,8 @@ contract TestERC20 is ERC20Upgradeable { function libSetBalance(address account, uint256 newBalance) external { LibERC20Storage.setUnderlyingBalance(account, newBalance); } + + function libSetTotalSupply(uint256 newTotalSupply) external { + LibERC20Storage.setUnderlyingTotalSupply(newTotalSupply); + } }