From 7ce2927464b7e1b50f5220891c1db3f729b82282 Mon Sep 17 00:00:00 2001 From: sascha Date: Wed, 22 Oct 2025 02:45:03 +0200 Subject: [PATCH] Buyout SellStakes --- .../CunaFinanceBsc.sol/CunaFinanceBsc.json | 77 ++++++--- contracts/CunaFinanceBsc.sol | 146 +++++++++++++----- hardhat.config.js | 61 ++++++-- 3 files changed, 206 insertions(+), 78 deletions(-) diff --git a/artifacts/contracts/CunaFinanceBsc.sol/CunaFinanceBsc.json b/artifacts/contracts/CunaFinanceBsc.sol/CunaFinanceBsc.json index 550aa31..9e7dcb2 100644 --- a/artifacts/contracts/CunaFinanceBsc.sol/CunaFinanceBsc.json +++ b/artifacts/contracts/CunaFinanceBsc.sol/CunaFinanceBsc.json @@ -490,6 +490,30 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "contractOwnedSellStakes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -1630,6 +1654,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "sellStakePremiumPercent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -1687,29 +1724,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "_token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_lockTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_percentagePerStep", - "type": "uint256" - } - ], - "name": "setUnlockScheduleByPercentage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "testUpgradeFunction", @@ -1880,6 +1894,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_newPremium", + "type": "uint256" + } + ], + "name": "updateSellStakePremiumPercent", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -2141,8 +2168,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b615bac80620000e66000396000f3fe608060405234801561001057600080fd5b506004361061036e5760003560e01c8062159da6146103735780630137451814610399578063022914a7146103cf5780630519da3214610402578063092c76101461040b5780630a84096a1461042b5780630a910a6d1461043e5780630c7d63861461044757806313baee5b14610451578063173825d9146104715780631764303d146104845780631aefa2d1146104975780631eb9e53e146104aa5780632ded58aa146104bd5780632e46fed8146104c65780633ba8396e146104ef5780633c92f98d146105125780633e4bc6bc146105345780633f35e7221461053d57806343a32f891461055057806343c7c011146105cb578063441a4175146105de57806348ea286d146105ff5780634a61f1e51461061257806351e624721461063257806351f6cf2f146106455780635811622714610666578063592d1dd11461067957806361d1080b1461069957806362cd6a09146106a157806363624c83146106b857806367a74ddc146106cb5780636ef569a5146106de5780637065cb48146106e757806375060a0b146106fa5780637a0c6dc01461071a5780637bc221ac1461073a5780637e6d99261461074d5780637ee612551461077657806380259e691461078957806380ca0ecf1461079c5780638129fc1c146107af57806382b75681146107b757806384e8520a146107ca578063853e0df2146107ea5780638939d787146107fd5780638f82818f14610806578063953d16bf1461082657806396fd111a146108395780639cb6f556146108595780639f3a676c1461086c578063a0d46758146108b8578063aaf4b04d146108d8578063ac97b417146108eb578063b6c3dc4c146108fe578063b92a349f1461091e578063bc0bc6ba14610931578063bd84477d14610951578063bed9757e146109b9578063c0c07d17146109da578063c2676603146109ed578063c32d3ae2146109f5578063c6b61e4c14610a28578063c7b530b014610a98578063cc573a9114610ab8578063ce13d09014610af4578063cfcf331914610b07578063d532bdfe14610b27578063da1b436414610b3a578063e88f8e6614610b5a578063eacdc5ff14610b6d578063eb44e0a314610b76578063ef5d9ae814610b89578063f2bb563014610ba9578063fe2f50d014610bbc578063fee6018c14610bc5578063ffecf51614610bd8575b600080fd5b610386610381366004615134565b610beb565b6040519081526020015b60405180910390f35b6103c26103a7366004615134565b6004602052600090815260409020546001600160a01b031681565b6040516103909190615156565b6103f26103dd366004615134565b60006020819052908152604090205460ff1681565b6040519015158152602001610390565b61038660075481565b610386610419366004615134565b60066020526000908152604090205481565b61038661043936600461516a565b610c85565b61038660125481565b61044f610dbd565b005b61038661045f366004615134565b600c6020526000908152604090205481565b61044f61047f366004615134565b610f83565b61044f6104923660046151d8565b611074565b61044f6104a5366004615219565b6112b2565b6103866104b8366004615134565b6112e6565b61038660115481565b6103866104d4366004615134565b6001600160a01b03166000908152601c602052604090205490565b6103f26104fd366004615134565b60016020526000908152604090205460ff1681565b6105256105203660046151d8565b61132a565b6040516103909392919061526d565b610386601d5481565b61044f61054b36600461516a565b61151b565b61059c61055e36600461516a565b60146020908152600092835260408084209091529082529020805460018201546002830154600390930154919290916001600160a01b039091169084565b604051610390949392919093845260208401929092526001600160a01b03166040830152606082015260800190565b61044f6105d9366004615134565b611590565b6105f16105ec366004615219565b6118fe565b6040516103909291906152a3565b61044f61060d366004615134565b611936565b610386610620366004615134565b60186020526000908152604090205481565b61044f610640366004615219565b611ac2565b61065861065336600461516a565b611af6565b6040516103909291906152bc565b61044f6106743660046152ca565b611b32565b610386610687366004615134565b60056020526000908152604090205481565b601b54610386565b6106a9611d9c565b60405161039093929190615318565b61044f6106c63660046153ba565b611fc3565b61044f6106d9366004615438565b6121b1565b61038660165481565b61044f6106f5366004615134565b61220e565b610386610708366004615134565b600a6020526000908152604090205481565b61072d610728366004615134565b6122e0565b604051610390919061546b565b610386610748366004615134565b6123c7565b61038661075b366004615134565b6001600160a01b031660009081526017602052604090205490565b61044f610784366004615519565b61259b565b61044f610797366004615219565b612725565b6103866107aa36600461516a565b612759565b61044f612865565b61044f6107c5366004615219565b612a48565b6103866107d8366004615134565b600d6020526000908152604090205481565b61044f6107f8366004615219565b612ada565b61038660135481565b610386610814366004615134565b60176020526000908152604090205481565b61044f610834366004615219565b612b58565b61084c6108473660046152ca565b612e3a565b6040516103909190615585565b61044f610867366004615219565b612fd9565b61087f61087a366004615219565b613268565b6040805196875260208701959095529385019290925260608401526001600160a01b0390811660808401521660a082015260c001610390565b6108cb6108c636600461516a565b6132bb565b60405161039091906155d3565b61044f6108e6366004615219565b61331f565b61044f6108f9366004615219565b6133a5565b61091161090c36600461516a565b613797565b604051610390919061560d565b61044f61092c36600461561b565b6138a9565b61094461093f366004615219565b613a4a565b604051610390919061564e565b61096461095f36600461516a565b613aee565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c08501526001600160a01b031660e0840152151561010083015261012082015261014001610390565b6109cc6109c736600461516a565b613b6c565b60405161039092919061565c565b61044f6109e8366004615519565b613d12565b6103e9610386565b610a08610a03366004615134565b613e5f565b604080519485526020850193909352918301526060820152608001610390565b610a6b610a36366004615219565b600b60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610390565b610aab610aa6366004615134565b613eb3565b6040516103909190615681565b610acb610ac636600461516a565b613f48565b604080519485526020850193909352918301526001600160a01b03166060820152608001610390565b61044f610b02366004615219565b613f97565b610b1a610b153660046152ca565b613fcb565b60405161039091906156c3565b61044f610b353660046151d8565b614194565b610386610b48366004615134565b600e6020526000908152604090205481565b610525610b68366004615134565b6143cd565b61038660105481565b61044f610b8436600461516a565b6145a5565b610386610b97366004615134565b601c6020526000908152604090205481565b61044f610bb73660046152ca565b614b43565b61038660155481565b61044f610bd336600461573d565b614bfd565b61044f610be6366004615134565b614dc4565b600080610bf7836112e6565b6001600160a01b0384166000908152600e6020526040902054909150805b601054811015610c7d578215610c6b576000818152600b602052604081206004015461271090610c4590866157b3565b610c4f91906157ca565b9050610c5b81866157ec565b9450610c6781856157ff565b9350505b80610c7581615812565b915050610c15565b505050919050565b6001600160a01b0382166000908152600260205260408120805482919084908110610cb257610cb261582b565b906000526020600020906009020190506000816006015442610cd491906157ff565b60078301549091506001600160a01b03166000805b6001600160a01b038316600090815260036020526040902054811015610db0576001600160a01b0383166000908152600360205260408120805483908110610d3357610d3361582b565b6000918252602082206002909102018054600182015460088a015492945090929091606490610d6490600a906157b3565b610d6e91906157ca565b9050828810610d9b57612710610d8483836157b3565b610d8e91906157ca565b610d9890876157ec565b95505b5050505080610da990615812565b9050610ce9565b5093505050505b92915050565b610dc5614e40565b6000610dd033610beb565b905060008111610dfb5760405162461bcd60e51b8152600401610df290615841565b60405180910390fd5b336000908152600c602052604081208054839290610e1a9084906157ff565b925050819055508060116000828254610e3391906157ff565b9091555050601054336000908152600e6020908152604080832093909355601c90529081208054839290610e689084906157ec565b909155505060088054906000610e7d83615812565b9091555050336000908152600f6020908152604091829020825160808101845260085481529182018490526007549092820190610eba90426157ec565b8152600080516020615ad7833981519152602091820181905283546001808201865560009586528386208551600490930201918255848401519082015560408401516002820155606090930151600390930180546001600160a01b0319166001600160a01b0390941693909317909255908252600a9052600080516020615a778339815191528054839290610f509084906157ec565b90915550506040518181523390600080516020615a978339815191529060200160405180910390a250610f81614e76565b565b3360009081526020819052604090205460ff16610fb25760405162461bcd60e51b8152600401610df29061586b565b6001600160a01b03811660009081526020819052604090205460ff166110065760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606401610df2565b336001600160a01b038216036110535760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb329039b2b63360711b6044820152606401610df2565b6001600160a01b03166000908152602081905260409020805460ff19169055565b61107c614e40565b6000805b8281101561122b57600084848381811061109c5761109c61582b565b336000908152600260209081526040909120549102929092013592505081106110c55750611219565b3360009081526002602052604081208054839081106110e6576110e661582b565b9060005260206000209060090201905060006111023384610c85565b9050816004015481101561111857505050611219565b600082600401548261112a91906157ff565b90508060000361113d5750505050611219565b8083600401600082825461115191906157ec565b90915550611161905081876157ec565b336000908152600f6020526040908190208151608081019092529197508061118c87620f42406157ec565b8152602001838152602001600754426111a591906157ec565b8152600080516020615ad7833981519152602091820152825460018082018555600094855293829020835160049092020190815590820151928101929092556040810151600283015560600151600390910180546001600160a01b0319166001600160a01b03909216919091179055505050505b8061122381615812565b915050611080565b5080156112a557600080516020615ad78339815191526000908152600a602052600080516020615a77833981519152805483929061126a9084906157ec565b909155505060405181815233907f4e69fdc49495bcab2b4375781457ba16653a90eb4ffb6588351bdc39071433e29060200160405180910390a25b506112ae614e76565b5050565b3360009081526020819052604090205460ff166112e15760405162461bcd60e51b8152600401610df29061586b565b601655565b6001600160a01b0381166000908152600c60209081526040808320546018909252822054808211611318576000611322565b61132281836157ff565b949350505050565b606080600083806001600160401b0381111561134857611348615893565b604051908082528060200260200182016040528015611371578160200160208202803683370190505b509350806001600160401b0381111561138c5761138c615893565b6040519080825280602002602001820160405280156113b5578160200160208202803683370190505b50925060005b818110156115125760008787838181106113d7576113d761582b565b90506020020160208101906113ec9190615134565b6001600160a01b038116600090815260066020526040902054875191925090819088908590811061141f5761141f61582b565b6020908102919091018101919091526001600160a01b03808416600090815260049283905260408082205490516302c68be360e31b815291939216916316345f189161146d91879101615156565b602060405180830381865afa15801561148a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ae91906158a9565b90506000670de0b6b3a76400006114c584846157b3565b6114cf91906157ca565b9050808886815181106114e4576114e461582b565b60209081029190910101526114f981886157ec565b965050505050808061150a90615812565b9150506113bb565b50509250925092565b3360009081526020819052604090205460ff1661154a5760405162461bcd60e51b8152600401610df29061586b565b61155e6001600160a01b0383163383614e87565b6040518181526001600160a01b038316903390600080516020615b178339815191529060200160405180910390a35050565b611598614e40565b6000805b336000908152600260205260409020548110156116a3573360009081526002602052604081208054839081106115d4576115d461582b565b6000918252602090912060099091020160078101549091506001600160a01b03858116911614801561161257506007810154600160a01b900460ff16155b156116905760006116233384612759565b9050816003015481111561168e57600082600301548261164391906157ff565b905061164f81866157ec565b94508083600301600082825461166591906157ec565b9091555050825460038401541061168c5760078301805460ff60a01b1916600160a01b1790555b505b505b508061169b81615812565b91505061159c565b50600081116116c45760405162461bcd60e51b8152600401610df290615841565b33600090815260056020526040902054156117d1576001600160a01b0380831660009081526004602081905260408083205490516302c68be360e31b81529293670de0b6b3a764000093869392909116916316345f189161172791899101615156565b602060405180830381865afa158015611744573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176891906158a9565b61177291906157b3565b61177c91906157ca565b3360009081526005602052604090205490915081106117aa57336000908152600560205260408120556117cf565b33600090815260056020526040812080548392906117c99084906157ff565b90915550505b505b6001600160a01b038216600090815260066020526040812080548392906117f99084906157ff565b9091555050336000908152600f60205260408082208151608081019092526009805491938392919061182a83615812565b9190505581526020018381526020016007544261184791906157ec565b81526001600160a01b0385811660209283018190528454600180820187556000968752848720865160049093020191825585850151908201556040808601516002830155606090950151600390910180546001600160a01b03191691909316179091558352600a9052812080548392906118c29084906157ec565b90915550506040513390600080516020615ab7833981519152906118ea9084906000906152bc565b60405180910390a2506118fb614e76565b50565b6019818154811061190e57600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b3360009081526001602052604090205460ff166119655760405162461bcd60e51b8152600401610df29061586b565b60005b6001600160a01b0382166000908152600260205260409020548110156112ae576001600160a01b03821660009081526002602052604081208054839081106119b2576119b261582b565b906000526020600020906009020190508060070160149054906101000a900460ff16611a865760088101546001600160a01b03841660009081526005602052604090205410611a2e5760088101546001600160a01b03841660009081526005602052604081208054909190611a289084906157ff565b90915550505b805460078201546001600160a01b031660009081526006602052604090205410611a8657805460078201546001600160a01b031660009081526006602052604081208054909190611a809084906157ff565b90915550505b600080825560018201819055600382018190556004820155600701805460ff60a01b1916600160a01b179055611abb81615812565b9050611968565b3360009081526020819052604090205460ff16611af15760405162461bcd60e51b8152600401610df29061586b565b601555565b60036020528160005260406000208181548110611b1257600080fd5b600091825260209091206002909102018054600190910154909250905082565b611b3a614e40565b60008211611b7a5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642076616c756560981b6044820152606401610df2565b60008111611b9a5760405162461bcd60e51b8152600401610df2906158c2565b601554821015611be25760405162461bcd60e51b815260206004820152601360248201527256616c75652062656c6f77206d696e696d756d60681b6044820152606401610df2565b6000611bed336112e6565b905080831115611c0f5760405162461bcd60e51b8152600401610df2906158ee565b60088054906000611c1f83615812565b90915550506008543360009081526018602052604081208054869290611c469084906157ec565b909155505060408051608081018252858152602080820186815233838501818152426060860190815260008381526014865287812089825286528781209651875593516001808801919091559151600280880180546001600160a01b039384166001600160a01b03199182161790915592516003909801979097558751808901909852928752938601878152601980548084018255948190529651939095027f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c969581018054949093169390941692909217905591517f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9696909101559054611d4b91906157ff565b336000818152601a6020908152604080832086845290915290819020929092559051600080516020615af783398151915290611d8a90869085906152bc565b60405180910390a250506112ae614e76565b60195460609081908190806001600160401b03811115611dbe57611dbe615893565b604051908082528060200260200182016040528015611de7578160200160208202803683370190505b509350806001600160401b03811115611e0257611e02615893565b604051908082528060200260200182016040528015611e2b578160200160208202803683370190505b509250806001600160401b03811115611e4657611e46615893565b604051908082528060200260200182016040528015611e7f57816020015b611e6c615076565b815260200190600190039081611e645790505b50915060005b81811015611fbc57600060198281548110611ea257611ea261582b565b60009182526020918290206040805180820190915260029092020180546001600160a01b0316808352600190910154928201929092528751909250879084908110611eef57611eef61582b565b60200260200101906001600160a01b031690816001600160a01b0316815250508060200151858381518110611f2657611f2661582b565b60209081029190910181019190915281516001600160a01b0390811660009081526014835260408082208585015183528452908190208151608081018352815481526001820154948101949094526002810154909216908301526003015460608201528451859084908110611f9d57611f9d61582b565b6020026020010181905250508080611fb490615812565b915050611e85565b5050909192565b3360009081526001602052604090205460ff16611ff25760405162461bcd60e51b8152600401610df29061586b565b600260008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518061014001604052808b81526020018a8152602001898152602001848152602001838152602001868152602001858152602001886001600160a01b03168152602001600015158152602001878152509080600181540180825580915050600190039060005260206000209060090201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160070160146101000a81548160ff0219169083151502179055506101208201518160080155505084600560008c6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461216891906157ec565b909155506121789050828a6157ff565b6001600160a01b038716600090815260066020526040812080549091906121a09084906157ec565b909155505050505050505050505050565b3360009081526020819052604090205460ff166121e05760405162461bcd60e51b8152600401610df29061586b565b6001600160a01b03918216600090815260046020526040902080546001600160a01b03191691909216179055565b3360009081526020819052604090205460ff1661223d5760405162461bcd60e51b8152600401610df29061586b565b6001600160a01b0381166122635760405162461bcd60e51b8152600401610df29061591e565b6001600160a01b03811660009081526020819052604090205460ff16156122bc5760405162461bcd60e51b815260206004820152600d60248201526c20b63932b0b23c9037bbb732b960991b6044820152606401610df2565b6001600160a01b03166000908152602081905260409020805460ff19166001179055565b6001600160a01b0381166000908152600260209081526040808320805482518185028101850190935280835260609492939192909184015b828210156123bc57600084815260209081902060408051610140810182526009860290920180548352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a0840152600681015460c084015260078101546001600160a01b03811660e0850152600160a01b900460ff161515610100840152600801546101208301529083529092019101612318565b505050509050919050565b6001600160a01b038116600090815260026020526040812054815b81811015612594576001600160a01b03841660009081526002602052604081208054839081106124145761241461582b565b600091825260209182902060408051610140810182526009909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260078201546001600160a01b03811660e083015260ff600160a01b909104161515610100820181905260089092015461012082015291506125815760e0810180516001600160a01b03908116600090815260046020819052604080832054945190516302c68be360e31b81529294909316926316345f18926124f59201615156565b602060405180830381865afa158015612512573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253691906158a9565b905060008260600151836000015161254e91906157ff565b90506000670de0b6b3a764000061256583856157b3565b61256f91906157ca565b905061257b81886157ec565b96505050505b508061258c81615812565b9150506123e2565b5050919050565b3360009081526020819052604090205460ff166125ca5760405162461bcd60e51b8152600401610df29061586b565b6000601054116126125760405162461bcd60e51b81526020600482015260136024820152724e6f2065706f63687320746f2075706461746560681b6044820152606401610df2565b6000600160105461262391906157ff565b90506000821561266d5760008361263c876127106157b3565b61264691906157ca565b9050821561265b576126588186614ee4565b91505b601d5481111561266b57601d8190555b505b60135481111561268f5760405162461bcd60e51b8152600401610df290615947565b6040805160c081018252878152602080820188815282840187815260608401898152608085018781524260a0870190815260008a8152600b9096529487902095518655925160018601559051600285015551600384015551600483015551600590910155518290600080516020615b578339815191529061271590889085908990615977565b60405180910390a2505050505050565b3360009081526020819052604090205460ff166127545760405162461bcd60e51b8152600401610df29061586b565b601d55565b6001600160a01b03821660009081526002602052604081208054829190849081106127865761278661582b565b9060005260206000209060090201905060008160060154426127a891906157ff565b60078301549091506001600160a01b03166000805b6001600160a01b038316600090815260036020526040902054811015610db0576001600160a01b03831660009081526003602052604081208054839081106128075761280761582b565b6000918252602090912060029091020180546001820154919250908187106128515787546127109061283a9083906157b3565b61284491906157ca565b61284e90866157ec565b94505b5050508061285e90615812565b90506127bd565b600061286f614f2b565b805490915060ff600160401b82041615906001600160401b03166000811580156128965750825b90506000826001600160401b031660011480156128b25750303b155b9050811580156128c0575080155b156128de5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561290757845460ff60401b1916600160401b1785555b61290f614f54565b3360009081526020818152604082208054600160ff1991821681179092557f4cfa3c6903140891ecff713e237b1f1746362568dfb5e8e9bc37719e4f37e0c58054821683179055918190527f3e1f9e6abae6b647fdc3c5896ef1871ceb3c98e9e72852da3f17d161a860f76c80548316821790557f3517cbb3edfcef55b3b32be7021bc73ef070f4a8bad0d4b389b96924cf17b7418054831682179055738a9281ecece9b599c2f42d829c3d0d8e74b7083e9092527f968a1791ad31618c63b086103baa804af57c3ca0efa33a191010fbb7741579fc805490911690911790556203f48060075560646013558315612a4157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b3360009081526020819052604090205460ff16612a775760405162461bcd60e51b8152600401610df29061586b565b60008111612ad55760405162461bcd60e51b815260206004820152602560248201527f4d61782070657263656e74616765206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610df2565b601355565b3360009081526020819052604090205460ff16612b095760405162461bcd60e51b8152600401610df29061586b565b612b22600080516020615ad78339815191523383614e87565b604051818152600080516020615ad7833981519152903390600080516020615b178339815191529060200160405180910390a350565b33600090815260146020908152604080832084845290915290208054612b905760405162461bcd60e51b8152600401610df29061598d565b60028101546001600160a01b03163314612bbc5760405162461bcd60e51b8152600401610df2906159b8565b805460165460009061271090612bd290846157b3565b612bdc91906157ca565b33600090815260186020526040812080549293508492909190612c009084906157ff565b90915550508015612c4957336000908152600c602052604081208054839290612c2a9084906157ff565b925050819055508060116000828254612c4391906157ff565b90915550505b8015612c9357336001600160a01b03167f4725a4d4de9bff212d0885095e27515072f73f427df55e52f37f241321ef88f98286604051612c8a9291906152bc565b60405180910390a25b336000818152601460209081526040808320888452825280832083815560018082018590556002820180546001600160a01b03191690556003909101849055938352601a82528083208884529091528120546019549092612cf3916157ff565b9050808214612db457600060198281548110612d1157612d1161582b565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101549181019190915260198054919250829185908110612d5d57612d5d61582b565b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001909401939093558351168152601a8252604080822093830151825292909152208290555b6019805480612dc557612dc56159e0565b600082815260208082206002600019949094019384020180546001600160a01b03191681556001018290559190925533808352601a825260408084208a855283528084209390935591518881527f73d12dec3eb3b445b6c9feb2fd559ba7c852c525bc1e59d8f7ff760c55df041d9101612715565b606081831115612e7c5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642072616e676560981b6044820152606401610df2565b6010548210612ec35760405162461bcd60e51b8152602060048201526013602482015272115b9908195c1bd8da081b9bdd08199bdd5b99606a1b6044820152606401610df2565b6000612ecf84846157ff565b612eda9060016157ec565b90506000816001600160401b03811115612ef657612ef6615893565b604051908082528060200260200182016040528015612f2f57816020015b612f1c6150a7565b815260200190600190039081612f145790505b50905060005b82811015612fd057600b6000612f4b83896157ec565b81526020019081526020016000206040518060c00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481525050828281518110612fb257612fb261582b565b60200260200101819052508080612fc890615812565b915050612f35565b50949350505050565b612fe1614e40565b600081116130015760405162461bcd60e51b8152600401610df2906159f6565b60006012541161304a5760405162461bcd60e51b81526020600482015260146024820152734275796f7574206e6f7420617661696c61626c6560601b6044820152606401610df2565b6000613055336112e6565b9050808211156130775760405162461bcd60e51b8152600401610df2906158ee565b612710613086826109c46157b3565b61309091906157ca565b8210156130d05760405162461bcd60e51b815260206004820152600e60248201526d416d6f756e7420746f6f206c6f7760901b6044820152606401610df2565b6000612710601254846130e391906157b3565b6130ed91906157ca565b336000908152600c60205260408120805492935085929091906131119084906157ff565b92505081905550826011600082825461312a91906157ff565b9091555050336000908152601c60205260408120805483929061314e9084906157ec565b90915550506008805490600061316383615812565b9091555050336000908152600f60209081526040918290208251608081018452600854815291820184905260075490928201906131a090426157ec565b8152600080516020615ad7833981519152602091820181905283546001808201865560009586528386208551600490930201918255848401519082015560408401516002820155606090930151600390930180546001600160a01b0319166001600160a01b0390941693909317909255908252600a9052600080516020615a7783398151915280548392906132369084906157ec565b90915550506040518181523390600080516020615a978339815191529060200160405180910390a250506118fb614e76565b601b818154811061327857600080fd5b6000918252602090912060069091020180546001820154600283015460038401546004850154600590950154939550919390926001600160a01b03918216911686565b6132c3615076565b506001600160a01b03918216600090815260146020908152604080832093835292815290829020825160808101845281548152600182015492810192909252600281015490931691810191909152600390910154606082015290565b3360009081526020819052604090205460ff1661334e5760405162461bcd60e51b8152600401610df29061586b565b6127108111156133a05760405162461bcd60e51b815260206004820152601d60248201527f50657263656e746167652063616e6e6f742065786365656420313030250000006044820152606401610df2565b601255565b6133ad614e40565b3360009081526002602052604090205481106134035760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840eccae6e8d2dcce40d2dcc8caf605b1b6044820152606401610df2565b3360009081526002602052604081208054839081106134245761342461582b565b906000526020600020906009020190508060070160149054906101000a900460ff16156134865760405162461bcd60e51b815260206004820152601060248201526f56657374696e6720636f6d706c65746560801b6044820152606401610df2565b60006134923384612759565b905081600301548110156134df5760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a590818db185a5b48185b5bdd5b9d60621b6044820152606401610df2565b60008260030154826134f191906157ff565b9050600081116135135760405162461bcd60e51b8152600401610df290615841565b8083600301600082825461352791906157ec565b9091555050825460038401541061354e5760078301805460ff60a01b1916600160a01b1790555b336000908152600560205260409020541561365f5760078301546001600160a01b0390811660008181526004602081905260408083205490516302c68be360e31b81529294670de0b6b3a764000094879492909116926316345f18926135b5929101615156565b602060405180830381865afa1580156135d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f691906158a9565b61360091906157b3565b61360a91906157ca565b336000908152600560205260409020549091508110613638573360009081526005602052604081205561365d565b33600090815260056020526040812080548392906136579084906157ff565b90915550505b505b60078301546001600160a01b03166000908152600660205260408120805483929061368b9084906157ff565b9091555050336000908152600f6020526040808220815160808101909252600980549193839291906136bc83615812565b919050558152602001838152602001600754426136d991906157ec565b81526007860180546001600160a01b039081166020938401528454600180820187556000968752848720865160049093020191825585850151908201556040808601516002830155606090950151600390910180546001600160a01b0319169183169190911790559054168352600a90528120805483929061375c9084906157ec565b90915550506040513390600080516020615ab7833981519152906137849084906000906152bc565b60405180910390a25050506118fb614e76565b6137cb604051806080016040528060008152602001600081526020016000815260200160006001600160a01b031681525090565b6001600160a01b0383166000908152600f60205260408120905b815481101561389057838282815481106138015761380161582b565b9060005260206000209060040201600001540361387e5781818154811061382a5761382a61582b565b6000918252602091829020604080516080810182526004909302909101805483526001810154938301939093526002830154908201526003909101546001600160a01b031660608201529250610db7915050565b8061388881615812565b9150506137e5565b5060405162461bcd60e51b8152600401610df290615a1e565b3360009081526020819052604090205460ff166138d85760405162461bcd60e51b8152600401610df29061586b565b6001600160a01b0383166138fe5760405162461bcd60e51b8152600401610df290615a47565b60008111801561391057506127108111155b6139515760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642070657263656e7461676560701b6044820152606401610df2565b6001600160a01b0383166000908152600360205260408120613972916150dd565b6000825b612710821015613a0f578261271061398e82856157ec565b11156139a3576139a0836127106157ff565b90505b6001600160a01b03861660009081526003602090815260408083208151808301909252858252818301858152815460018181018455928652939094209151600290930290910191825591519101556139fb81846157ec565b9250613a0785836157ec565b915050613976565b6040516001600160a01b038616907fde4b6ccc38b84f88129403b65a309f9b1c41d4c316bc2118d7614e449b9d4c4590600090a25050505050565b613a526150a7565b6010548210613a955760405162461bcd60e51b815260206004820152600f60248201526e115c1bd8da081b9bdd08199bdd5b99608a1b6044820152606401610df2565b506000908152600b6020908152604091829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a082015290565b60026020528160005260406000208181548110613b0a57600080fd5b6000918252602090912060099091020180546001820154600283015460038401546004850154600586015460068701546007880154600890980154969950949750929591949093916001600160a01b03811691600160a01b90910460ff16908a565b6001600160a01b038216600090815260026020526040812080546060928392909185908110613b9d57613b9d61582b565b600091825260208083206007600990930201918201546001600160a01b03168084526003909152604083205491935091816001600160401b03811115613be557613be5615893565b604051908082528060200260200182016040528015613c0e578160200160208202803683370190505b5090506000826001600160401b03811115613c2b57613c2b615893565b604051908082528060200260200182016040528015613c54578160200160208202803683370190505b50905060005b83811015613d01576001600160a01b0385166000908152600360205260408120805483908110613c8c57613c8c61582b565b9060005260206000209060020201905080600001548760060154613cb091906157ec565b848381518110613cc257613cc261582b565b6020026020010181815250508060010154838381518110613ce557613ce561582b565b602090810291909101015250613cfa81615812565b9050613c5a565b5090955093505050505b9250929050565b3360009081526020819052604090205460ff16613d415760405162461bcd60e51b8152600401610df29061586b565b60008115613d8c57600082613d58866127106157b3565b613d6291906157ca565b60105490915015613d7a57613d778185614ee4565b91505b601d54811115613d8a57601d8190555b505b601354811115613dae5760405162461bcd60e51b8152600401610df290615947565b6040805160c081018252868152602080820187815282840186815260608401888152608085018781524260a08701908152601080546000908152600b9097529588902096518755935160018701559151600286015551600385015551600484015551600590920191909155549051600080516020615b5783398151915290613e3b90879085908890615977565b60405180910390a260108054906000613e5383615812565b91905055505050505050565b6000806000806000613e7086610beb565b90506000613e7d876112e6565b6001600160a01b03979097166000908152600c6020908152604080832054600d9092529091205490989297965094509092505050565b6001600160a01b0381166000908152600f60209081526040808320805482518185028101850190935280835260609492939192909184015b828210156123bc57600084815260209081902060408051608081018252600486029092018054835260018082015484860152600282015492840192909252600301546001600160a01b031660608301529083529092019101613eeb565b600f6020528160005260406000208181548110613f6457600080fd5b6000918252602090912060049091020180546001820154600283015460039093015491945092506001600160a01b031684565b3360009081526020819052604090205460ff16613fc65760405162461bcd60e51b8152600401610df29061586b565b600755565b601b54606090831061401b5760405162461bcd60e51b8152602060048201526019602482015278537461727420696e646578206f7574206f6620626f756e647360381b6044820152606401610df2565b600061402783856157ec565b601b549091508111156140395750601b545b600061404585836157ff565b6001600160401b0381111561405c5761405c615893565b6040519080825280602002602001820160405280156140d857816020015b6140c56040518060c001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b81526020019060019003908161407a5790505b509050845b82811015612fd057601b81815481106140f8576140f861582b565b60009182526020918290206040805160c0810182526006909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546001600160a01b03908116608083015260059092015490911660a08201528261416688846157ff565b815181106141765761417661582b565b6020026020010181905250808061418c90615812565b9150506140dd565b61419c614e40565b336000908152600f6020526040902080546141ef5760405162461bcd60e51b81526020600482015260136024820152724e6f207374616b657320617661696c61626c6560681b6044820152606401610df2565b816142345760405162461bcd60e51b8152602060048201526015602482015274139bc81cdd185ad94812511cc81c1c9bdd9a591959605a1b6044820152606401610df2565b60005b828110156143c35760008484838181106142535761425361582b565b9050602002013590506000805b845481101561439057600085828154811061427d5761427d61582b565b906000526020600020906004020190508381600001541480156142a4575060008160010154115b1561437d5780600201544210156142ec5760405162461bcd60e51b815260206004820152600c60248201526b14dd185ad9481b1bd8dad95960a21b6044820152606401610df2565b60018101805460038301546000928390556001600160a01b0316808352600a602052604083208054929391928492906143269084906157ff565b9091555061434090506001600160a01b0382163384614e87565b336001600160a01b0316600080516020615b3783398151915283886040516143699291906152bc565b60405180910390a260019450505050614390565b508061438881615812565b915050614260565b50806143ae5760405162461bcd60e51b8152600401610df290615a1e565b505080806143bb90615812565b915050614237565b50506112ae614e76565b6060806000806143dc856112e6565b6001600160a01b0386166000908152600e6020526040812054601054929350916144079083906157ff565b90508060000361443857505060408051600080825260208201818152828401909352909550909350915061459e9050565b806001600160401b0381111561445057614450615893565b604051908082528060200260200182016040528015614479578160200160208202803683370190505b509550806001600160401b0381111561449457614494615893565b6040519080825280602002602001820160405280156144bd578160200160208202803683370190505b50945060005b818110156145995760006144d782856157ec565b9050808883815181106144ec576144ec61582b565b60209081029190910101528415614565576000818152600b60205260408120600401546127109061451d90886157b3565b61452791906157ca565b90508088848151811061453c5761453c61582b565b602090810291909101015261455181886157ec565b965061455d81876157ff565b955050614586565b60008783815181106145795761457961582b565b6020026020010181815250505b508061459181615812565b9150506144c3565b505050505b9193909250565b6145ad614e40565b6001600160a01b0382166000908152601460209081526040808320848452909152902080546145ee5760405162461bcd60e51b8152600401610df29061598d565b336001600160a01b0384160361463f5760405162461bcd60e51b815260206004820152601660248201527543616e6e6f7420627579206f776e206c697374696e6760501b6044820152606401610df2565b805460018201546003830154600082841161465b576000614665565b61466583856157ff565b9050600084614676836127106157b3565b61468091906157ca565b9050600061271061469183806157b3565b61469b91906157ca565b905060006127106146ac83896157b3565b6146b691906157ca565b905060006146c482896157ff565b90506146e0600080516020615ad7833981519152338d8a614f64565b336000908152600c6020526040812054900361470a57601054336000908152600e60205260409020555b6001600160a01b038b166000908152600c6020526040812080548a92906147329084906157ff565b9091555050336000908152600c6020526040812080548392906147569084906157ec565b90915550506001600160a01b038b16600090815260186020526040812080548a92906147839084906157ff565b9091555050336000908152600d6020526040812080548392906147a79084906157ec565b9250508190555081601160008282546147c091906157ff565b90915550506001600160a01b038b16600090815260176020526040812080548992906147ed9084906157ec565b92505081905550601b6040518060c001604052808881526020014281526020018a81526020018981526020018d6001600160a01b03168152602001336001600160a01b031681525090806001815401808255809150506001900390600052602060002090600602016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a08201518160050160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050601460008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008b815260200190815260200160002060008082016000905560018201600090556002820160006101000a8154906001600160a01b030219169055600382016000905550506000601a60008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c81526020019081526020016000205490506000600160198054905061499c91906157ff565b9050808214614a5d576000601982815481106149ba576149ba61582b565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101549181019190915260198054919250829185908110614a0657614a0661582b565b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001909401939093558351168152601a8252604080822093830151825292909152208290555b6019805480614a6e57614a6e6159e0565b6001900381819060005260206000209060020201600080820160006101000a8154906001600160a01b030219169055600182016000905550509055601a60008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d815260200190815260200160002060009055336001600160a01b03168d6001600160a01b03167f7bb39d095b04a9986ed34adf14d74c33294d0a9e807f02bf634d532507422eba8b8f604051614b289291906152bc565b60405180910390a350505050505050505050506112ae614e76565b33600090815260146020908152604080832085845290915290208054614b7b5760405162461bcd60e51b8152600401610df29061598d565b60028101546001600160a01b03163314614ba75760405162461bcd60e51b8152600401610df2906159b8565b60008211614bc75760405162461bcd60e51b8152600401610df2906158c2565b600181018290556040513390600080516020615af783398151915290614bf090859087906152bc565b60405180910390a2505050565b3360009081526001602052604090205460ff16614c2c5760405162461bcd60e51b8152600401610df29061586b565b6001600160a01b038516614c795760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642075736572206164647265737360601b6044820152606401610df2565b60008411614c995760405162461bcd60e51b8152600401610df2906159f6565b6001600160a01b038216614cbf5760405162461bcd60e51b8152600401610df290615a47565b60088054906000614ccf83615812565b9190505550600081614ce357600854614cf3565b600854614cf390620f42406157ec565b6001600160a01b038781166000908152600f6020908152604080832081516080810183528681528084018c81528184018c81528b881660608401818152855460018082018855968a52888a209551600490910290950194855592519484019490945551600283015551600390910180546001600160a01b0319169190961617909455928252600a905290812080549293508792909190614d949084906157ec565b92505081905550856001600160a01b0316600080516020615b3783398151915286836040516127159291906152bc565b3360009081526020819052604090205460ff16614df35760405162461bcd60e51b8152600401610df29061586b565b6001600160a01b038116614e195760405162461bcd60e51b8152600401610df29061591e565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000614e4a614fa3565b805490915060011901614e7057604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6000614e80614fa3565b6001905550565b614edf83846001600160a01b031663a9059cbb8585604051602401614ead9291906152a3565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614fc7565b505050565b6000601d548311614ef757506000610db7565b6000601d5484614f0791906157ff565b90506000612710614f1885846157b3565b614f2291906157ca565b95945050505050565b6000807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610db7565b614f5c61502f565b610f81615054565b6040516001600160a01b038481166024830152838116604483015260648201839052614f9d9186918216906323b872dd90608401614ead565b50505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b600080602060008451602086016000885af180614fea576040513d6000823e3d81fd5b50506000513d9150811561500257806001141561500f565b6001600160a01b0384163b155b15614f9d5783604051635274afe760e01b8152600401610df29190615156565b61503761505c565b610f8157604051631afcd79f60e31b815260040160405180910390fd5b614e7661502f565b6000615066614f2b565b54600160401b900460ff16919050565b6040518060800160405280600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b50805460008255600202906000526020600020908101906118fb91905b8082111561511457600080825560018201556002016150fa565b5090565b80356001600160a01b038116811461512f57600080fd5b919050565b60006020828403121561514657600080fd5b61514f82615118565b9392505050565b6001600160a01b0391909116815260200190565b6000806040838503121561517d57600080fd5b61518683615118565b946020939093013593505050565b60008083601f8401126151a657600080fd5b5081356001600160401b038111156151bd57600080fd5b6020830191508360208260051b8501011115613d0b57600080fd5b600080602083850312156151eb57600080fd5b82356001600160401b0381111561520157600080fd5b61520d85828601615194565b90969095509350505050565b60006020828403121561522b57600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561526257815187529582019590820190600101615246565b509495945050505050565b6060815260006152806060830186615232565b82810360208401526152928186615232565b915050826040830152949350505050565b6001600160a01b03929092168252602082015260400190565b918252602082015260400190565b600080604083850312156152dd57600080fd5b50508035926020909101359150565b80518252602080820151908301526040808201516001600160a01b031690830152606090810151910152565b60608082528451908201819052600090608090818401906020808901855b8381101561535b5781516001600160a01b031685529382019390820190600101615336565b50508583038187015261536e8389615232565b868103604088015287518082528289019450908201925060005b818110156153ab5761539b8486516152ec565b9382019392850192600101615388565b50919998505050505050505050565b6000806000806000806000806000806101408b8d0312156153da57600080fd5b6153e38b615118565b995060208b0135985060408b0135975060608b0135965061540660808c01615118565b999c989b50969995989760a0870135975060c08701359660e08101359650610100810135955061012001359350915050565b6000806040838503121561544b57600080fd5b61545483615118565b915061546260208401615118565b90509250929050565b602080825282518282018190526000919060409081850190868401855b8281101561550c5781518051855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0808201519086015260e0808201516001600160a01b0316908601526101008082015115159086015261012090810151908501526101409093019290850190600101615488565b5091979650505050505050565b6000806000806080858703121561552f57600080fd5b5050823594602084013594506040840135936060013592509050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301525050565b6020808252825182820181905260009190848201906040850190845b818110156155c7576155b483855161554b565b9284019260c092909201916001016155a1565b50909695505050505050565b60808101610db782846152ec565b8051825260208082015190830152604080820151908301526060908101516001600160a01b0316910152565b60808101610db782846155e1565b60008060006060848603121561563057600080fd5b61563984615118565b95602085013595506040909401359392505050565b60c08101610db7828461554b565b60408152600061566f6040830185615232565b8281036020840152614f228185615232565b6020808252825182820181905260009190848201906040850190845b818110156155c7576156b08385516155e1565b928401926080929092019160010161569d565b602080825282518282018190526000919060409081850190868401855b8281101561550c5781518051855286810151878601528581015186860152606080820151908601526080808201516001600160a01b039081169187019190915260a091820151169085015260c090930192908501906001016156e0565b600080600080600060a0868803121561575557600080fd5b61575e86615118565b9450602086013593506040860135925061577a60608701615118565b91506080860135801515811461578f57600080fd5b809150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610db757610db761579d565b6000826157e757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610db757610db761579d565b81810381811115610db757610db761579d565b6000600182016158245761582461579d565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60208082526010908201526f4e6f7468696e6720746f20636c61696d60801b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156158bb57600080fd5b5051919050565b602080825260129082015271496e76616c69642073616c6520707269636560701b604082015260600190565b602080825260169082015275496e73756666696369656e74206e6574207374616b6560501b604082015260600190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b6020808252601690820152750aadcd8dec6d640e0cae4c6cadce8c2ceca40d0d2ced60531b604082015260600190565b9283526020830191909152604082015260600190565b602080825260119082015270131a5cdd1a5b99c81b9bdd08199bdd5b99607a1b604082015260600190565b6020808252600e908201526d2737ba103a34329039b2b63632b960911b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b6020808252600e908201526d125b9d985b1a5908185b5bdd5b9d60921b604082015260600190565b6020808252600f908201526e14dd185ad9481b9bdd08199bdd5b99608a1b604082015260600190565b602080825260159082015274496e76616c696420746f6b656e206164647265737360581b60408201526060019056feb0775d57c3eeb070f58d410e36e9ff396813a5d76997d9a91bdf10f0798296f0a65a8b4f7f65a1063243d7f7e9e4da00ff767599acf21549ef2548a45d1695ae4a94c2c356e29a6583071e731bdacf2ca56565ba5efebcff6936eb7923b5172100000000000000000000000055d398326f99059ff775485246999027b31979558e79b7ba8dab5ebfa59b9c6af1743c3ef14863680b3cc5ac837f8d636f76031ca92ff919b850e4909ab2261d907ef955f11bc1716733a6cbece38d163a69af8a933735aa8de6d7547d0126171b2f31b9c34dd00f3ecd4be85a0ba047db4fafefeadbedb993dfca23e4c79bf4fa5fe531c2e0e926258fabb8445e8bc5c472780fa26469706673582212201c168c6e11b7b2079c468ebd7a76c5acb5db68ee435be106a0d376f0ef9b40c864736f6c63430008140033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061036e5760003560e01c8062159da6146103735780630137451814610399578063022914a7146103cf5780630519da3214610402578063092c76101461040b5780630a84096a1461042b5780630a910a6d1461043e5780630c7d63861461044757806313baee5b14610451578063173825d9146104715780631764303d146104845780631aefa2d1146104975780631eb9e53e146104aa5780632ded58aa146104bd5780632e46fed8146104c65780633ba8396e146104ef5780633c92f98d146105125780633e4bc6bc146105345780633f35e7221461053d57806343a32f891461055057806343c7c011146105cb578063441a4175146105de57806348ea286d146105ff5780634a61f1e51461061257806351e624721461063257806351f6cf2f146106455780635811622714610666578063592d1dd11461067957806361d1080b1461069957806362cd6a09146106a157806363624c83146106b857806367a74ddc146106cb5780636ef569a5146106de5780637065cb48146106e757806375060a0b146106fa5780637a0c6dc01461071a5780637bc221ac1461073a5780637e6d99261461074d5780637ee612551461077657806380259e691461078957806380ca0ecf1461079c5780638129fc1c146107af57806382b75681146107b757806384e8520a146107ca578063853e0df2146107ea5780638939d787146107fd5780638f82818f14610806578063953d16bf1461082657806396fd111a146108395780639cb6f556146108595780639f3a676c1461086c578063a0d46758146108b8578063aaf4b04d146108d8578063ac97b417146108eb578063b6c3dc4c146108fe578063b92a349f1461091e578063bc0bc6ba14610931578063bd84477d14610951578063bed9757e146109b9578063c0c07d17146109da578063c2676603146109ed578063c32d3ae2146109f5578063c6b61e4c14610a28578063c7b530b014610a98578063cc573a9114610ab8578063ce13d09014610af4578063cfcf331914610b07578063d532bdfe14610b27578063da1b436414610b3a578063e88f8e6614610b5a578063eacdc5ff14610b6d578063eb44e0a314610b76578063ef5d9ae814610b89578063f2bb563014610ba9578063fe2f50d014610bbc578063fee6018c14610bc5578063ffecf51614610bd8575b600080fd5b610386610381366004615134565b610beb565b6040519081526020015b60405180910390f35b6103c26103a7366004615134565b6004602052600090815260409020546001600160a01b031681565b6040516103909190615156565b6103f26103dd366004615134565b60006020819052908152604090205460ff1681565b6040519015158152602001610390565b61038660075481565b610386610419366004615134565b60066020526000908152604090205481565b61038661043936600461516a565b610c85565b61038660125481565b61044f610dbd565b005b61038661045f366004615134565b600c6020526000908152604090205481565b61044f61047f366004615134565b610f83565b61044f6104923660046151d8565b611074565b61044f6104a5366004615219565b6112b2565b6103866104b8366004615134565b6112e6565b61038660115481565b6103866104d4366004615134565b6001600160a01b03166000908152601c602052604090205490565b6103f26104fd366004615134565b60016020526000908152604090205460ff1681565b6105256105203660046151d8565b61132a565b6040516103909392919061526d565b610386601d5481565b61044f61054b36600461516a565b61151b565b61059c61055e36600461516a565b60146020908152600092835260408084209091529082529020805460018201546002830154600390930154919290916001600160a01b039091169084565b604051610390949392919093845260208401929092526001600160a01b03166040830152606082015260800190565b61044f6105d9366004615134565b611590565b6105f16105ec366004615219565b6118fe565b6040516103909291906152a3565b61044f61060d366004615134565b611936565b610386610620366004615134565b60186020526000908152604090205481565b61044f610640366004615219565b611ac2565b61065861065336600461516a565b611af6565b6040516103909291906152bc565b61044f6106743660046152ca565b611b32565b610386610687366004615134565b60056020526000908152604090205481565b601b54610386565b6106a9611d9c565b60405161039093929190615318565b61044f6106c63660046153ba565b611fc3565b61044f6106d9366004615438565b6121b1565b61038660165481565b61044f6106f5366004615134565b61220e565b610386610708366004615134565b600a6020526000908152604090205481565b61072d610728366004615134565b6122e0565b604051610390919061546b565b610386610748366004615134565b6123c7565b61038661075b366004615134565b6001600160a01b031660009081526017602052604090205490565b61044f610784366004615519565b61259b565b61044f610797366004615219565b612725565b6103866107aa36600461516a565b612759565b61044f612865565b61044f6107c5366004615219565b612a48565b6103866107d8366004615134565b600d6020526000908152604090205481565b61044f6107f8366004615219565b612ada565b61038660135481565b610386610814366004615134565b60176020526000908152604090205481565b61044f610834366004615219565b612b58565b61084c6108473660046152ca565b612e3a565b6040516103909190615585565b61044f610867366004615219565b612fd9565b61087f61087a366004615219565b613268565b6040805196875260208701959095529385019290925260608401526001600160a01b0390811660808401521660a082015260c001610390565b6108cb6108c636600461516a565b6132bb565b60405161039091906155d3565b61044f6108e6366004615219565b61331f565b61044f6108f9366004615219565b6133a5565b61091161090c36600461516a565b613797565b604051610390919061560d565b61044f61092c36600461561b565b6138a9565b61094461093f366004615219565b613a4a565b604051610390919061564e565b61096461095f36600461516a565b613aee565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c08501526001600160a01b031660e0840152151561010083015261012082015261014001610390565b6109cc6109c736600461516a565b613b6c565b60405161039092919061565c565b61044f6109e8366004615519565b613d12565b6103e9610386565b610a08610a03366004615134565b613e5f565b604080519485526020850193909352918301526060820152608001610390565b610a6b610a36366004615219565b600b60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610390565b610aab610aa6366004615134565b613eb3565b6040516103909190615681565b610acb610ac636600461516a565b613f48565b604080519485526020850193909352918301526001600160a01b03166060820152608001610390565b61044f610b02366004615219565b613f97565b610b1a610b153660046152ca565b613fcb565b60405161039091906156c3565b61044f610b353660046151d8565b614194565b610386610b48366004615134565b600e6020526000908152604090205481565b610525610b68366004615134565b6143cd565b61038660105481565b61044f610b8436600461516a565b6145a5565b610386610b97366004615134565b601c6020526000908152604090205481565b61044f610bb73660046152ca565b614b43565b61038660155481565b61044f610bd336600461573d565b614bfd565b61044f610be6366004615134565b614dc4565b600080610bf7836112e6565b6001600160a01b0384166000908152600e6020526040902054909150805b601054811015610c7d578215610c6b576000818152600b602052604081206004015461271090610c4590866157b3565b610c4f91906157ca565b9050610c5b81866157ec565b9450610c6781856157ff565b9350505b80610c7581615812565b915050610c15565b505050919050565b6001600160a01b0382166000908152600260205260408120805482919084908110610cb257610cb261582b565b906000526020600020906009020190506000816006015442610cd491906157ff565b60078301549091506001600160a01b03166000805b6001600160a01b038316600090815260036020526040902054811015610db0576001600160a01b0383166000908152600360205260408120805483908110610d3357610d3361582b565b6000918252602082206002909102018054600182015460088a015492945090929091606490610d6490600a906157b3565b610d6e91906157ca565b9050828810610d9b57612710610d8483836157b3565b610d8e91906157ca565b610d9890876157ec565b95505b5050505080610da990615812565b9050610ce9565b5093505050505b92915050565b610dc5614e40565b6000610dd033610beb565b905060008111610dfb5760405162461bcd60e51b8152600401610df290615841565b60405180910390fd5b336000908152600c602052604081208054839290610e1a9084906157ff565b925050819055508060116000828254610e3391906157ff565b9091555050601054336000908152600e6020908152604080832093909355601c90529081208054839290610e689084906157ec565b909155505060088054906000610e7d83615812565b9091555050336000908152600f6020908152604091829020825160808101845260085481529182018490526007549092820190610eba90426157ec565b8152600080516020615ad7833981519152602091820181905283546001808201865560009586528386208551600490930201918255848401519082015560408401516002820155606090930151600390930180546001600160a01b0319166001600160a01b0390941693909317909255908252600a9052600080516020615a778339815191528054839290610f509084906157ec565b90915550506040518181523390600080516020615a978339815191529060200160405180910390a250610f81614e76565b565b3360009081526020819052604090205460ff16610fb25760405162461bcd60e51b8152600401610df29061586b565b6001600160a01b03811660009081526020819052604090205460ff166110065760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606401610df2565b336001600160a01b038216036110535760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb329039b2b63360711b6044820152606401610df2565b6001600160a01b03166000908152602081905260409020805460ff19169055565b61107c614e40565b6000805b8281101561122b57600084848381811061109c5761109c61582b565b336000908152600260209081526040909120549102929092013592505081106110c55750611219565b3360009081526002602052604081208054839081106110e6576110e661582b565b9060005260206000209060090201905060006111023384610c85565b9050816004015481101561111857505050611219565b600082600401548261112a91906157ff565b90508060000361113d5750505050611219565b8083600401600082825461115191906157ec565b90915550611161905081876157ec565b336000908152600f6020526040908190208151608081019092529197508061118c87620f42406157ec565b8152602001838152602001600754426111a591906157ec565b8152600080516020615ad7833981519152602091820152825460018082018555600094855293829020835160049092020190815590820151928101929092556040810151600283015560600151600390910180546001600160a01b0319166001600160a01b03909216919091179055505050505b8061122381615812565b915050611080565b5080156112a557600080516020615ad78339815191526000908152600a602052600080516020615a77833981519152805483929061126a9084906157ec565b909155505060405181815233907f4e69fdc49495bcab2b4375781457ba16653a90eb4ffb6588351bdc39071433e29060200160405180910390a25b506112ae614e76565b5050565b3360009081526020819052604090205460ff166112e15760405162461bcd60e51b8152600401610df29061586b565b601655565b6001600160a01b0381166000908152600c60209081526040808320546018909252822054808211611318576000611322565b61132281836157ff565b949350505050565b606080600083806001600160401b0381111561134857611348615893565b604051908082528060200260200182016040528015611371578160200160208202803683370190505b509350806001600160401b0381111561138c5761138c615893565b6040519080825280602002602001820160405280156113b5578160200160208202803683370190505b50925060005b818110156115125760008787838181106113d7576113d761582b565b90506020020160208101906113ec9190615134565b6001600160a01b038116600090815260066020526040902054875191925090819088908590811061141f5761141f61582b565b6020908102919091018101919091526001600160a01b03808416600090815260049283905260408082205490516302c68be360e31b815291939216916316345f189161146d91879101615156565b602060405180830381865afa15801561148a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ae91906158a9565b90506000670de0b6b3a76400006114c584846157b3565b6114cf91906157ca565b9050808886815181106114e4576114e461582b565b60209081029190910101526114f981886157ec565b965050505050808061150a90615812565b9150506113bb565b50509250925092565b3360009081526020819052604090205460ff1661154a5760405162461bcd60e51b8152600401610df29061586b565b61155e6001600160a01b0383163383614e87565b6040518181526001600160a01b038316903390600080516020615b178339815191529060200160405180910390a35050565b611598614e40565b6000805b336000908152600260205260409020548110156116a3573360009081526002602052604081208054839081106115d4576115d461582b565b6000918252602090912060099091020160078101549091506001600160a01b03858116911614801561161257506007810154600160a01b900460ff16155b156116905760006116233384612759565b9050816003015481111561168e57600082600301548261164391906157ff565b905061164f81866157ec565b94508083600301600082825461166591906157ec565b9091555050825460038401541061168c5760078301805460ff60a01b1916600160a01b1790555b505b505b508061169b81615812565b91505061159c565b50600081116116c45760405162461bcd60e51b8152600401610df290615841565b33600090815260056020526040902054156117d1576001600160a01b0380831660009081526004602081905260408083205490516302c68be360e31b81529293670de0b6b3a764000093869392909116916316345f189161172791899101615156565b602060405180830381865afa158015611744573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176891906158a9565b61177291906157b3565b61177c91906157ca565b3360009081526005602052604090205490915081106117aa57336000908152600560205260408120556117cf565b33600090815260056020526040812080548392906117c99084906157ff565b90915550505b505b6001600160a01b038216600090815260066020526040812080548392906117f99084906157ff565b9091555050336000908152600f60205260408082208151608081019092526009805491938392919061182a83615812565b9190505581526020018381526020016007544261184791906157ec565b81526001600160a01b0385811660209283018190528454600180820187556000968752848720865160049093020191825585850151908201556040808601516002830155606090950151600390910180546001600160a01b03191691909316179091558352600a9052812080548392906118c29084906157ec565b90915550506040513390600080516020615ab7833981519152906118ea9084906000906152bc565b60405180910390a2506118fb614e76565b50565b6019818154811061190e57600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b3360009081526001602052604090205460ff166119655760405162461bcd60e51b8152600401610df29061586b565b60005b6001600160a01b0382166000908152600260205260409020548110156112ae576001600160a01b03821660009081526002602052604081208054839081106119b2576119b261582b565b906000526020600020906009020190508060070160149054906101000a900460ff16611a865760088101546001600160a01b03841660009081526005602052604090205410611a2e5760088101546001600160a01b03841660009081526005602052604081208054909190611a289084906157ff565b90915550505b805460078201546001600160a01b031660009081526006602052604090205410611a8657805460078201546001600160a01b031660009081526006602052604081208054909190611a809084906157ff565b90915550505b600080825560018201819055600382018190556004820155600701805460ff60a01b1916600160a01b179055611abb81615812565b9050611968565b3360009081526020819052604090205460ff16611af15760405162461bcd60e51b8152600401610df29061586b565b601555565b60036020528160005260406000208181548110611b1257600080fd5b600091825260209091206002909102018054600190910154909250905082565b611b3a614e40565b60008211611b7a5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642076616c756560981b6044820152606401610df2565b60008111611b9a5760405162461bcd60e51b8152600401610df2906158c2565b601554821015611be25760405162461bcd60e51b815260206004820152601360248201527256616c75652062656c6f77206d696e696d756d60681b6044820152606401610df2565b6000611bed336112e6565b905080831115611c0f5760405162461bcd60e51b8152600401610df2906158ee565b60088054906000611c1f83615812565b90915550506008543360009081526018602052604081208054869290611c469084906157ec565b909155505060408051608081018252858152602080820186815233838501818152426060860190815260008381526014865287812089825286528781209651875593516001808801919091559151600280880180546001600160a01b039384166001600160a01b03199182161790915592516003909801979097558751808901909852928752938601878152601980548084018255948190529651939095027f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c969581018054949093169390941692909217905591517f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9696909101559054611d4b91906157ff565b336000818152601a6020908152604080832086845290915290819020929092559051600080516020615af783398151915290611d8a90869085906152bc565b60405180910390a250506112ae614e76565b60195460609081908190806001600160401b03811115611dbe57611dbe615893565b604051908082528060200260200182016040528015611de7578160200160208202803683370190505b509350806001600160401b03811115611e0257611e02615893565b604051908082528060200260200182016040528015611e2b578160200160208202803683370190505b509250806001600160401b03811115611e4657611e46615893565b604051908082528060200260200182016040528015611e7f57816020015b611e6c615076565b815260200190600190039081611e645790505b50915060005b81811015611fbc57600060198281548110611ea257611ea261582b565b60009182526020918290206040805180820190915260029092020180546001600160a01b0316808352600190910154928201929092528751909250879084908110611eef57611eef61582b565b60200260200101906001600160a01b031690816001600160a01b0316815250508060200151858381518110611f2657611f2661582b565b60209081029190910181019190915281516001600160a01b0390811660009081526014835260408082208585015183528452908190208151608081018352815481526001820154948101949094526002810154909216908301526003015460608201528451859084908110611f9d57611f9d61582b565b6020026020010181905250508080611fb490615812565b915050611e85565b5050909192565b3360009081526001602052604090205460ff16611ff25760405162461bcd60e51b8152600401610df29061586b565b600260008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518061014001604052808b81526020018a8152602001898152602001848152602001838152602001868152602001858152602001886001600160a01b03168152602001600015158152602001878152509080600181540180825580915050600190039060005260206000209060090201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160070160146101000a81548160ff0219169083151502179055506101208201518160080155505084600560008c6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461216891906157ec565b909155506121789050828a6157ff565b6001600160a01b038716600090815260066020526040812080549091906121a09084906157ec565b909155505050505050505050505050565b3360009081526020819052604090205460ff166121e05760405162461bcd60e51b8152600401610df29061586b565b6001600160a01b03918216600090815260046020526040902080546001600160a01b03191691909216179055565b3360009081526020819052604090205460ff1661223d5760405162461bcd60e51b8152600401610df29061586b565b6001600160a01b0381166122635760405162461bcd60e51b8152600401610df29061591e565b6001600160a01b03811660009081526020819052604090205460ff16156122bc5760405162461bcd60e51b815260206004820152600d60248201526c20b63932b0b23c9037bbb732b960991b6044820152606401610df2565b6001600160a01b03166000908152602081905260409020805460ff19166001179055565b6001600160a01b0381166000908152600260209081526040808320805482518185028101850190935280835260609492939192909184015b828210156123bc57600084815260209081902060408051610140810182526009860290920180548352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a0840152600681015460c084015260078101546001600160a01b03811660e0850152600160a01b900460ff161515610100840152600801546101208301529083529092019101612318565b505050509050919050565b6001600160a01b038116600090815260026020526040812054815b81811015612594576001600160a01b03841660009081526002602052604081208054839081106124145761241461582b565b600091825260209182902060408051610140810182526009909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260078201546001600160a01b03811660e083015260ff600160a01b909104161515610100820181905260089092015461012082015291506125815760e0810180516001600160a01b03908116600090815260046020819052604080832054945190516302c68be360e31b81529294909316926316345f18926124f59201615156565b602060405180830381865afa158015612512573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253691906158a9565b905060008260600151836000015161254e91906157ff565b90506000670de0b6b3a764000061256583856157b3565b61256f91906157ca565b905061257b81886157ec565b96505050505b508061258c81615812565b9150506123e2565b5050919050565b3360009081526020819052604090205460ff166125ca5760405162461bcd60e51b8152600401610df29061586b565b6000601054116126125760405162461bcd60e51b81526020600482015260136024820152724e6f2065706f63687320746f2075706461746560681b6044820152606401610df2565b6000600160105461262391906157ff565b90506000821561266d5760008361263c876127106157b3565b61264691906157ca565b9050821561265b576126588186614ee4565b91505b601d5481111561266b57601d8190555b505b60135481111561268f5760405162461bcd60e51b8152600401610df290615947565b6040805160c081018252878152602080820188815282840187815260608401898152608085018781524260a0870190815260008a8152600b9096529487902095518655925160018601559051600285015551600384015551600483015551600590910155518290600080516020615b578339815191529061271590889085908990615977565b60405180910390a2505050505050565b3360009081526020819052604090205460ff166127545760405162461bcd60e51b8152600401610df29061586b565b601d55565b6001600160a01b03821660009081526002602052604081208054829190849081106127865761278661582b565b9060005260206000209060090201905060008160060154426127a891906157ff565b60078301549091506001600160a01b03166000805b6001600160a01b038316600090815260036020526040902054811015610db0576001600160a01b03831660009081526003602052604081208054839081106128075761280761582b565b6000918252602090912060029091020180546001820154919250908187106128515787546127109061283a9083906157b3565b61284491906157ca565b61284e90866157ec565b94505b5050508061285e90615812565b90506127bd565b600061286f614f2b565b805490915060ff600160401b82041615906001600160401b03166000811580156128965750825b90506000826001600160401b031660011480156128b25750303b155b9050811580156128c0575080155b156128de5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561290757845460ff60401b1916600160401b1785555b61290f614f54565b3360009081526020818152604082208054600160ff1991821681179092557f4cfa3c6903140891ecff713e237b1f1746362568dfb5e8e9bc37719e4f37e0c58054821683179055918190527f3e1f9e6abae6b647fdc3c5896ef1871ceb3c98e9e72852da3f17d161a860f76c80548316821790557f3517cbb3edfcef55b3b32be7021bc73ef070f4a8bad0d4b389b96924cf17b7418054831682179055738a9281ecece9b599c2f42d829c3d0d8e74b7083e9092527f968a1791ad31618c63b086103baa804af57c3ca0efa33a191010fbb7741579fc805490911690911790556203f48060075560646013558315612a4157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b3360009081526020819052604090205460ff16612a775760405162461bcd60e51b8152600401610df29061586b565b60008111612ad55760405162461bcd60e51b815260206004820152602560248201527f4d61782070657263656e74616765206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610df2565b601355565b3360009081526020819052604090205460ff16612b095760405162461bcd60e51b8152600401610df29061586b565b612b22600080516020615ad78339815191523383614e87565b604051818152600080516020615ad7833981519152903390600080516020615b178339815191529060200160405180910390a350565b33600090815260146020908152604080832084845290915290208054612b905760405162461bcd60e51b8152600401610df29061598d565b60028101546001600160a01b03163314612bbc5760405162461bcd60e51b8152600401610df2906159b8565b805460165460009061271090612bd290846157b3565b612bdc91906157ca565b33600090815260186020526040812080549293508492909190612c009084906157ff565b90915550508015612c4957336000908152600c602052604081208054839290612c2a9084906157ff565b925050819055508060116000828254612c4391906157ff565b90915550505b8015612c9357336001600160a01b03167f4725a4d4de9bff212d0885095e27515072f73f427df55e52f37f241321ef88f98286604051612c8a9291906152bc565b60405180910390a25b336000818152601460209081526040808320888452825280832083815560018082018590556002820180546001600160a01b03191690556003909101849055938352601a82528083208884529091528120546019549092612cf3916157ff565b9050808214612db457600060198281548110612d1157612d1161582b565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101549181019190915260198054919250829185908110612d5d57612d5d61582b565b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001909401939093558351168152601a8252604080822093830151825292909152208290555b6019805480612dc557612dc56159e0565b600082815260208082206002600019949094019384020180546001600160a01b03191681556001018290559190925533808352601a825260408084208a855283528084209390935591518881527f73d12dec3eb3b445b6c9feb2fd559ba7c852c525bc1e59d8f7ff760c55df041d9101612715565b606081831115612e7c5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642072616e676560981b6044820152606401610df2565b6010548210612ec35760405162461bcd60e51b8152602060048201526013602482015272115b9908195c1bd8da081b9bdd08199bdd5b99606a1b6044820152606401610df2565b6000612ecf84846157ff565b612eda9060016157ec565b90506000816001600160401b03811115612ef657612ef6615893565b604051908082528060200260200182016040528015612f2f57816020015b612f1c6150a7565b815260200190600190039081612f145790505b50905060005b82811015612fd057600b6000612f4b83896157ec565b81526020019081526020016000206040518060c00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481525050828281518110612fb257612fb261582b565b60200260200101819052508080612fc890615812565b915050612f35565b50949350505050565b612fe1614e40565b600081116130015760405162461bcd60e51b8152600401610df2906159f6565b60006012541161304a5760405162461bcd60e51b81526020600482015260146024820152734275796f7574206e6f7420617661696c61626c6560601b6044820152606401610df2565b6000613055336112e6565b9050808211156130775760405162461bcd60e51b8152600401610df2906158ee565b612710613086826109c46157b3565b61309091906157ca565b8210156130d05760405162461bcd60e51b815260206004820152600e60248201526d416d6f756e7420746f6f206c6f7760901b6044820152606401610df2565b6000612710601254846130e391906157b3565b6130ed91906157ca565b336000908152600c60205260408120805492935085929091906131119084906157ff565b92505081905550826011600082825461312a91906157ff565b9091555050336000908152601c60205260408120805483929061314e9084906157ec565b90915550506008805490600061316383615812565b9091555050336000908152600f60209081526040918290208251608081018452600854815291820184905260075490928201906131a090426157ec565b8152600080516020615ad7833981519152602091820181905283546001808201865560009586528386208551600490930201918255848401519082015560408401516002820155606090930151600390930180546001600160a01b0319166001600160a01b0390941693909317909255908252600a9052600080516020615a7783398151915280548392906132369084906157ec565b90915550506040518181523390600080516020615a978339815191529060200160405180910390a250506118fb614e76565b601b818154811061327857600080fd5b6000918252602090912060069091020180546001820154600283015460038401546004850154600590950154939550919390926001600160a01b03918216911686565b6132c3615076565b506001600160a01b03918216600090815260146020908152604080832093835292815290829020825160808101845281548152600182015492810192909252600281015490931691810191909152600390910154606082015290565b3360009081526020819052604090205460ff1661334e5760405162461bcd60e51b8152600401610df29061586b565b6127108111156133a05760405162461bcd60e51b815260206004820152601d60248201527f50657263656e746167652063616e6e6f742065786365656420313030250000006044820152606401610df2565b601255565b6133ad614e40565b3360009081526002602052604090205481106134035760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840eccae6e8d2dcce40d2dcc8caf605b1b6044820152606401610df2565b3360009081526002602052604081208054839081106134245761342461582b565b906000526020600020906009020190508060070160149054906101000a900460ff16156134865760405162461bcd60e51b815260206004820152601060248201526f56657374696e6720636f6d706c65746560801b6044820152606401610df2565b60006134923384612759565b905081600301548110156134df5760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a590818db185a5b48185b5bdd5b9d60621b6044820152606401610df2565b60008260030154826134f191906157ff565b9050600081116135135760405162461bcd60e51b8152600401610df290615841565b8083600301600082825461352791906157ec565b9091555050825460038401541061354e5760078301805460ff60a01b1916600160a01b1790555b336000908152600560205260409020541561365f5760078301546001600160a01b0390811660008181526004602081905260408083205490516302c68be360e31b81529294670de0b6b3a764000094879492909116926316345f18926135b5929101615156565b602060405180830381865afa1580156135d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f691906158a9565b61360091906157b3565b61360a91906157ca565b336000908152600560205260409020549091508110613638573360009081526005602052604081205561365d565b33600090815260056020526040812080548392906136579084906157ff565b90915550505b505b60078301546001600160a01b03166000908152600660205260408120805483929061368b9084906157ff565b9091555050336000908152600f6020526040808220815160808101909252600980549193839291906136bc83615812565b919050558152602001838152602001600754426136d991906157ec565b81526007860180546001600160a01b039081166020938401528454600180820187556000968752848720865160049093020191825585850151908201556040808601516002830155606090950151600390910180546001600160a01b0319169183169190911790559054168352600a90528120805483929061375c9084906157ec565b90915550506040513390600080516020615ab7833981519152906137849084906000906152bc565b60405180910390a25050506118fb614e76565b6137cb604051806080016040528060008152602001600081526020016000815260200160006001600160a01b031681525090565b6001600160a01b0383166000908152600f60205260408120905b815481101561389057838282815481106138015761380161582b565b9060005260206000209060040201600001540361387e5781818154811061382a5761382a61582b565b6000918252602091829020604080516080810182526004909302909101805483526001810154938301939093526002830154908201526003909101546001600160a01b031660608201529250610db7915050565b8061388881615812565b9150506137e5565b5060405162461bcd60e51b8152600401610df290615a1e565b3360009081526020819052604090205460ff166138d85760405162461bcd60e51b8152600401610df29061586b565b6001600160a01b0383166138fe5760405162461bcd60e51b8152600401610df290615a47565b60008111801561391057506127108111155b6139515760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642070657263656e7461676560701b6044820152606401610df2565b6001600160a01b0383166000908152600360205260408120613972916150dd565b6000825b612710821015613a0f578261271061398e82856157ec565b11156139a3576139a0836127106157ff565b90505b6001600160a01b03861660009081526003602090815260408083208151808301909252858252818301858152815460018181018455928652939094209151600290930290910191825591519101556139fb81846157ec565b9250613a0785836157ec565b915050613976565b6040516001600160a01b038616907fde4b6ccc38b84f88129403b65a309f9b1c41d4c316bc2118d7614e449b9d4c4590600090a25050505050565b613a526150a7565b6010548210613a955760405162461bcd60e51b815260206004820152600f60248201526e115c1bd8da081b9bdd08199bdd5b99608a1b6044820152606401610df2565b506000908152600b6020908152604091829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a082015290565b60026020528160005260406000208181548110613b0a57600080fd5b6000918252602090912060099091020180546001820154600283015460038401546004850154600586015460068701546007880154600890980154969950949750929591949093916001600160a01b03811691600160a01b90910460ff16908a565b6001600160a01b038216600090815260026020526040812080546060928392909185908110613b9d57613b9d61582b565b600091825260208083206007600990930201918201546001600160a01b03168084526003909152604083205491935091816001600160401b03811115613be557613be5615893565b604051908082528060200260200182016040528015613c0e578160200160208202803683370190505b5090506000826001600160401b03811115613c2b57613c2b615893565b604051908082528060200260200182016040528015613c54578160200160208202803683370190505b50905060005b83811015613d01576001600160a01b0385166000908152600360205260408120805483908110613c8c57613c8c61582b565b9060005260206000209060020201905080600001548760060154613cb091906157ec565b848381518110613cc257613cc261582b565b6020026020010181815250508060010154838381518110613ce557613ce561582b565b602090810291909101015250613cfa81615812565b9050613c5a565b5090955093505050505b9250929050565b3360009081526020819052604090205460ff16613d415760405162461bcd60e51b8152600401610df29061586b565b60008115613d8c57600082613d58866127106157b3565b613d6291906157ca565b60105490915015613d7a57613d778185614ee4565b91505b601d54811115613d8a57601d8190555b505b601354811115613dae5760405162461bcd60e51b8152600401610df290615947565b6040805160c081018252868152602080820187815282840186815260608401888152608085018781524260a08701908152601080546000908152600b9097529588902096518755935160018701559151600286015551600385015551600484015551600590920191909155549051600080516020615b5783398151915290613e3b90879085908890615977565b60405180910390a260108054906000613e5383615812565b91905055505050505050565b6000806000806000613e7086610beb565b90506000613e7d876112e6565b6001600160a01b03979097166000908152600c6020908152604080832054600d9092529091205490989297965094509092505050565b6001600160a01b0381166000908152600f60209081526040808320805482518185028101850190935280835260609492939192909184015b828210156123bc57600084815260209081902060408051608081018252600486029092018054835260018082015484860152600282015492840192909252600301546001600160a01b031660608301529083529092019101613eeb565b600f6020528160005260406000208181548110613f6457600080fd5b6000918252602090912060049091020180546001820154600283015460039093015491945092506001600160a01b031684565b3360009081526020819052604090205460ff16613fc65760405162461bcd60e51b8152600401610df29061586b565b600755565b601b54606090831061401b5760405162461bcd60e51b8152602060048201526019602482015278537461727420696e646578206f7574206f6620626f756e647360381b6044820152606401610df2565b600061402783856157ec565b601b549091508111156140395750601b545b600061404585836157ff565b6001600160401b0381111561405c5761405c615893565b6040519080825280602002602001820160405280156140d857816020015b6140c56040518060c001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b81526020019060019003908161407a5790505b509050845b82811015612fd057601b81815481106140f8576140f861582b565b60009182526020918290206040805160c0810182526006909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546001600160a01b03908116608083015260059092015490911660a08201528261416688846157ff565b815181106141765761417661582b565b6020026020010181905250808061418c90615812565b9150506140dd565b61419c614e40565b336000908152600f6020526040902080546141ef5760405162461bcd60e51b81526020600482015260136024820152724e6f207374616b657320617661696c61626c6560681b6044820152606401610df2565b816142345760405162461bcd60e51b8152602060048201526015602482015274139bc81cdd185ad94812511cc81c1c9bdd9a591959605a1b6044820152606401610df2565b60005b828110156143c35760008484838181106142535761425361582b565b9050602002013590506000805b845481101561439057600085828154811061427d5761427d61582b565b906000526020600020906004020190508381600001541480156142a4575060008160010154115b1561437d5780600201544210156142ec5760405162461bcd60e51b815260206004820152600c60248201526b14dd185ad9481b1bd8dad95960a21b6044820152606401610df2565b60018101805460038301546000928390556001600160a01b0316808352600a602052604083208054929391928492906143269084906157ff565b9091555061434090506001600160a01b0382163384614e87565b336001600160a01b0316600080516020615b3783398151915283886040516143699291906152bc565b60405180910390a260019450505050614390565b508061438881615812565b915050614260565b50806143ae5760405162461bcd60e51b8152600401610df290615a1e565b505080806143bb90615812565b915050614237565b50506112ae614e76565b6060806000806143dc856112e6565b6001600160a01b0386166000908152600e6020526040812054601054929350916144079083906157ff565b90508060000361443857505060408051600080825260208201818152828401909352909550909350915061459e9050565b806001600160401b0381111561445057614450615893565b604051908082528060200260200182016040528015614479578160200160208202803683370190505b509550806001600160401b0381111561449457614494615893565b6040519080825280602002602001820160405280156144bd578160200160208202803683370190505b50945060005b818110156145995760006144d782856157ec565b9050808883815181106144ec576144ec61582b565b60209081029190910101528415614565576000818152600b60205260408120600401546127109061451d90886157b3565b61452791906157ca565b90508088848151811061453c5761453c61582b565b602090810291909101015261455181886157ec565b965061455d81876157ff565b955050614586565b60008783815181106145795761457961582b565b6020026020010181815250505b508061459181615812565b9150506144c3565b505050505b9193909250565b6145ad614e40565b6001600160a01b0382166000908152601460209081526040808320848452909152902080546145ee5760405162461bcd60e51b8152600401610df29061598d565b336001600160a01b0384160361463f5760405162461bcd60e51b815260206004820152601660248201527543616e6e6f7420627579206f776e206c697374696e6760501b6044820152606401610df2565b805460018201546003830154600082841161465b576000614665565b61466583856157ff565b9050600084614676836127106157b3565b61468091906157ca565b9050600061271061469183806157b3565b61469b91906157ca565b905060006127106146ac83896157b3565b6146b691906157ca565b905060006146c482896157ff565b90506146e0600080516020615ad7833981519152338d8a614f64565b336000908152600c6020526040812054900361470a57601054336000908152600e60205260409020555b6001600160a01b038b166000908152600c6020526040812080548a92906147329084906157ff565b9091555050336000908152600c6020526040812080548392906147569084906157ec565b90915550506001600160a01b038b16600090815260186020526040812080548a92906147839084906157ff565b9091555050336000908152600d6020526040812080548392906147a79084906157ec565b9250508190555081601160008282546147c091906157ff565b90915550506001600160a01b038b16600090815260176020526040812080548992906147ed9084906157ec565b92505081905550601b6040518060c001604052808881526020014281526020018a81526020018981526020018d6001600160a01b03168152602001336001600160a01b031681525090806001815401808255809150506001900390600052602060002090600602016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a08201518160050160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050601460008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008b815260200190815260200160002060008082016000905560018201600090556002820160006101000a8154906001600160a01b030219169055600382016000905550506000601a60008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c81526020019081526020016000205490506000600160198054905061499c91906157ff565b9050808214614a5d576000601982815481106149ba576149ba61582b565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101549181019190915260198054919250829185908110614a0657614a0661582b565b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001909401939093558351168152601a8252604080822093830151825292909152208290555b6019805480614a6e57614a6e6159e0565b6001900381819060005260206000209060020201600080820160006101000a8154906001600160a01b030219169055600182016000905550509055601a60008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d815260200190815260200160002060009055336001600160a01b03168d6001600160a01b03167f7bb39d095b04a9986ed34adf14d74c33294d0a9e807f02bf634d532507422eba8b8f604051614b289291906152bc565b60405180910390a350505050505050505050506112ae614e76565b33600090815260146020908152604080832085845290915290208054614b7b5760405162461bcd60e51b8152600401610df29061598d565b60028101546001600160a01b03163314614ba75760405162461bcd60e51b8152600401610df2906159b8565b60008211614bc75760405162461bcd60e51b8152600401610df2906158c2565b600181018290556040513390600080516020615af783398151915290614bf090859087906152bc565b60405180910390a2505050565b3360009081526001602052604090205460ff16614c2c5760405162461bcd60e51b8152600401610df29061586b565b6001600160a01b038516614c795760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642075736572206164647265737360601b6044820152606401610df2565b60008411614c995760405162461bcd60e51b8152600401610df2906159f6565b6001600160a01b038216614cbf5760405162461bcd60e51b8152600401610df290615a47565b60088054906000614ccf83615812565b9190505550600081614ce357600854614cf3565b600854614cf390620f42406157ec565b6001600160a01b038781166000908152600f6020908152604080832081516080810183528681528084018c81528184018c81528b881660608401818152855460018082018855968a52888a209551600490910290950194855592519484019490945551600283015551600390910180546001600160a01b0319169190961617909455928252600a905290812080549293508792909190614d949084906157ec565b92505081905550856001600160a01b0316600080516020615b3783398151915286836040516127159291906152bc565b3360009081526020819052604090205460ff16614df35760405162461bcd60e51b8152600401610df29061586b565b6001600160a01b038116614e195760405162461bcd60e51b8152600401610df29061591e565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000614e4a614fa3565b805490915060011901614e7057604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6000614e80614fa3565b6001905550565b614edf83846001600160a01b031663a9059cbb8585604051602401614ead9291906152a3565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614fc7565b505050565b6000601d548311614ef757506000610db7565b6000601d5484614f0791906157ff565b90506000612710614f1885846157b3565b614f2291906157ca565b95945050505050565b6000807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610db7565b614f5c61502f565b610f81615054565b6040516001600160a01b038481166024830152838116604483015260648201839052614f9d9186918216906323b872dd90608401614ead565b50505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b600080602060008451602086016000885af180614fea576040513d6000823e3d81fd5b50506000513d9150811561500257806001141561500f565b6001600160a01b0384163b155b15614f9d5783604051635274afe760e01b8152600401610df29190615156565b61503761505c565b610f8157604051631afcd79f60e31b815260040160405180910390fd5b614e7661502f565b6000615066614f2b565b54600160401b900460ff16919050565b6040518060800160405280600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b50805460008255600202906000526020600020908101906118fb91905b8082111561511457600080825560018201556002016150fa565b5090565b80356001600160a01b038116811461512f57600080fd5b919050565b60006020828403121561514657600080fd5b61514f82615118565b9392505050565b6001600160a01b0391909116815260200190565b6000806040838503121561517d57600080fd5b61518683615118565b946020939093013593505050565b60008083601f8401126151a657600080fd5b5081356001600160401b038111156151bd57600080fd5b6020830191508360208260051b8501011115613d0b57600080fd5b600080602083850312156151eb57600080fd5b82356001600160401b0381111561520157600080fd5b61520d85828601615194565b90969095509350505050565b60006020828403121561522b57600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561526257815187529582019590820190600101615246565b509495945050505050565b6060815260006152806060830186615232565b82810360208401526152928186615232565b915050826040830152949350505050565b6001600160a01b03929092168252602082015260400190565b918252602082015260400190565b600080604083850312156152dd57600080fd5b50508035926020909101359150565b80518252602080820151908301526040808201516001600160a01b031690830152606090810151910152565b60608082528451908201819052600090608090818401906020808901855b8381101561535b5781516001600160a01b031685529382019390820190600101615336565b50508583038187015261536e8389615232565b868103604088015287518082528289019450908201925060005b818110156153ab5761539b8486516152ec565b9382019392850192600101615388565b50919998505050505050505050565b6000806000806000806000806000806101408b8d0312156153da57600080fd5b6153e38b615118565b995060208b0135985060408b0135975060608b0135965061540660808c01615118565b999c989b50969995989760a0870135975060c08701359660e08101359650610100810135955061012001359350915050565b6000806040838503121561544b57600080fd5b61545483615118565b915061546260208401615118565b90509250929050565b602080825282518282018190526000919060409081850190868401855b8281101561550c5781518051855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0808201519086015260e0808201516001600160a01b0316908601526101008082015115159086015261012090810151908501526101409093019290850190600101615488565b5091979650505050505050565b6000806000806080858703121561552f57600080fd5b5050823594602084013594506040840135936060013592509050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301525050565b6020808252825182820181905260009190848201906040850190845b818110156155c7576155b483855161554b565b9284019260c092909201916001016155a1565b50909695505050505050565b60808101610db782846152ec565b8051825260208082015190830152604080820151908301526060908101516001600160a01b0316910152565b60808101610db782846155e1565b60008060006060848603121561563057600080fd5b61563984615118565b95602085013595506040909401359392505050565b60c08101610db7828461554b565b60408152600061566f6040830185615232565b8281036020840152614f228185615232565b6020808252825182820181905260009190848201906040850190845b818110156155c7576156b08385516155e1565b928401926080929092019160010161569d565b602080825282518282018190526000919060409081850190868401855b8281101561550c5781518051855286810151878601528581015186860152606080820151908601526080808201516001600160a01b039081169187019190915260a091820151169085015260c090930192908501906001016156e0565b600080600080600060a0868803121561575557600080fd5b61575e86615118565b9450602086013593506040860135925061577a60608701615118565b91506080860135801515811461578f57600080fd5b809150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610db757610db761579d565b6000826157e757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610db757610db761579d565b81810381811115610db757610db761579d565b6000600182016158245761582461579d565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60208082526010908201526f4e6f7468696e6720746f20636c61696d60801b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156158bb57600080fd5b5051919050565b602080825260129082015271496e76616c69642073616c6520707269636560701b604082015260600190565b602080825260169082015275496e73756666696369656e74206e6574207374616b6560501b604082015260600190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b6020808252601690820152750aadcd8dec6d640e0cae4c6cadce8c2ceca40d0d2ced60531b604082015260600190565b9283526020830191909152604082015260600190565b602080825260119082015270131a5cdd1a5b99c81b9bdd08199bdd5b99607a1b604082015260600190565b6020808252600e908201526d2737ba103a34329039b2b63632b960911b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b6020808252600e908201526d125b9d985b1a5908185b5bdd5b9d60921b604082015260600190565b6020808252600f908201526e14dd185ad9481b9bdd08199bdd5b99608a1b604082015260600190565b602080825260159082015274496e76616c696420746f6b656e206164647265737360581b60408201526060019056feb0775d57c3eeb070f58d410e36e9ff396813a5d76997d9a91bdf10f0798296f0a65a8b4f7f65a1063243d7f7e9e4da00ff767599acf21549ef2548a45d1695ae4a94c2c356e29a6583071e731bdacf2ca56565ba5efebcff6936eb7923b5172100000000000000000000000055d398326f99059ff775485246999027b31979558e79b7ba8dab5ebfa59b9c6af1743c3ef14863680b3cc5ac837f8d636f76031ca92ff919b850e4909ab2261d907ef955f11bc1716733a6cbece38d163a69af8a933735aa8de6d7547d0126171b2f31b9c34dd00f3ecd4be85a0ba047db4fafefeadbedb993dfca23e4c79bf4fa5fe531c2e0e926258fabb8445e8bc5c472780fa26469706673582212201c168c6e11b7b2079c468ebd7a76c5acb5db68ee435be106a0d376f0ef9b40c864736f6c63430008140033", + "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b615ec580620000e66000396000f3fe608060405234801561001057600080fd5b50600436106103845760003560e01c8062159da61461038957806301374518146103af578063022914a7146103e55780630519da3214610418578063092c7610146104215780630a84096a146104415780630a910a6d146104545780630c7d63861461045d57806313baee5b14610467578063173825d9146104875780631764303d1461049a5780631aefa2d1146104ad5780631eb9e53e146104c05780632ded58aa146104d35780632e46fed8146104dc5780633ba8396e146105055780633c92f98d146105285780633e4bc6bc1461054a5780633f35e7221461055357806343a32f891461056657806343c7c011146105e1578063441a4175146105f457806348ea286d146106155780634a61f1e51461062857806351e624721461064857806351f6cf2f1461065b578063581162271461067c578063592d1dd11461068f57806361d1080b146106af57806362cd6a09146106b757806363624c83146106ce57806367a74ddc146106e15780636ef569a5146106f45780637065cb48146106fd57806375060a0b146107105780637a0c6dc0146107305780637bc221ac146107505780637e6d9926146107635780637ee612551461078c57806380259e691461079f57806380ca0ecf146107b25780638129fc1c146107c557806382b75681146107cd57806384e8520a146107e0578063853e0df2146108005780638939d787146108135780638f82818f1461081c578063953d16bf1461083c57806396fd111a1461084f5780639cb6f5561461086f5780639f3a676c14610882578063a0d46758146108ce578063aaf4b04d146108ee578063ac97b41714610901578063af8ee6be14610914578063b6c3dc4c1461093f578063bc0bc6ba1461095f578063bd84477d1461097f578063bed9757e146109e7578063c0c07d1714610a08578063c267660314610a1b578063c32d3ae214610a23578063c6b61e4c14610a56578063c7b530b014610ac6578063ca6c627c14610ae6578063cc573a9114610aef578063ce13d09014610b2b578063cfcf331914610b3e578063d532bdfe14610b5e578063da1b436414610b71578063dfe3cc7c14610b91578063e88f8e6614610ba4578063eacdc5ff14610bb7578063eb44e0a314610bc0578063ef5d9ae814610bd3578063f2bb563014610bf3578063fe2f50d014610c06578063fee6018c14610c0f578063ffecf51614610c22575b600080fd5b61039c61039736600461544f565b610c35565b6040519081526020015b60405180910390f35b6103d86103bd36600461544f565b6004602052600090815260409020546001600160a01b031681565b6040516103a69190615471565b6104086103f336600461544f565b60006020819052908152604090205460ff1681565b60405190151581526020016103a6565b61039c60075481565b61039c61042f36600461544f565b60066020526000908152604090205481565b61039c61044f366004615485565b610ccf565b61039c60125481565b610465610e07565b005b61039c61047536600461544f565b600c6020526000908152604090205481565b61046561049536600461544f565b610fcd565b6104656104a83660046154f3565b6110be565b6104656104bb366004615534565b6112fc565b61039c6104ce36600461544f565b611330565b61039c60115481565b61039c6104ea36600461544f565b6001600160a01b03166000908152601c602052604090205490565b61040861051336600461544f565b60016020526000908152604090205460ff1681565b61053b6105363660046154f3565b611374565b6040516103a693929190615588565b61039c601d5481565b610465610561366004615485565b611565565b6105b2610574366004615485565b60146020908152600092835260408084209091529082529020805460018201546002830154600390930154919290916001600160a01b039091169084565b6040516103a6949392919093845260208401929092526001600160a01b03166040830152606082015260800190565b6104656105ef36600461544f565b6115da565b610607610602366004615534565b611948565b6040516103a69291906155be565b61046561062336600461544f565b611980565b61039c61063636600461544f565b60186020526000908152604090205481565b610465610656366004615534565b611b0c565b61066e610669366004615485565b611b40565b6040516103a69291906155d7565b61046561068a3660046155e5565b611b7c565b61039c61069d36600461544f565b60056020526000908152604090205481565b601b5461039c565b6106bf611dc2565b6040516103a693929190615633565b6104656106dc3660046156d5565b611fe9565b6104656106ef366004615753565b6121d7565b61039c60165481565b61046561070b36600461544f565b612234565b61039c61071e36600461544f565b600a6020526000908152604090205481565b61074361073e36600461544f565b612306565b6040516103a69190615786565b61039c61075e36600461544f565b6123ed565b61039c61077136600461544f565b6001600160a01b031660009081526017602052604090205490565b61046561079a366004615834565b6125c1565b6104656107ad366004615534565b61274b565b61039c6107c0366004615485565b61277f565b61046561288b565b6104656107db366004615534565b612a74565b61039c6107ee36600461544f565b600d6020526000908152604090205481565b61046561080e366004615534565b612b06565b61039c60135481565b61039c61082a36600461544f565b60176020526000908152604090205481565b61046561084a366004615534565b612b84565b61086261085d3660046155e5565b612e54565b6040516103a691906158a0565b61046561087d366004615534565b612ff3565b610895610890366004615534565b613434565b6040805196875260208701959095529385019290925260608401526001600160a01b0390811660808401521660a082015260c0016103a6565b6108e16108dc366004615485565b613487565b6040516103a691906158ee565b6104656108fc366004615534565b6134eb565b61046561090f366004615534565b613571565b61039c610922366004615485565b601e60209081526000928352604080842090915290825290205481565b61095261094d366004615485565b613963565b6040516103a69190615928565b61097261096d366004615534565b613a75565b6040516103a69190615936565b61099261098d366004615485565b613b19565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c08501526001600160a01b031660e08401521515610100830152610120820152610140016103a6565b6109fa6109f5366004615485565b613b97565b6040516103a6929190615944565b610465610a16366004615834565b613d3d565b6103eb61039c565b610a36610a3136600461544f565b613e8a565b6040805194855260208501939093529183015260608201526080016103a6565b610a99610a64366004615534565b600b60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016103a6565b610ad9610ad436600461544f565b613ede565b6040516103a69190615969565b61039c601f5481565b610b02610afd366004615485565b613f73565b604080519485526020850193909352918301526001600160a01b031660608201526080016103a6565b610465610b39366004615534565b613fc2565b610b51610b4c3660046155e5565b613ff6565b6040516103a691906159ab565b610465610b6c3660046154f3565b6141bf565b61039c610b7f36600461544f565b600e6020526000908152604090205481565b610465610b9f366004615534565b61461a565b61053b610bb236600461544f565b61469c565b61039c60105481565b610465610bce366004615485565b614874565b61039c610be136600461544f565b601c6020526000908152604090205481565b610465610c013660046155e5565b614e71565b61039c60155481565b610465610c1d366004615a25565b614f2b565b610465610c3036600461544f565b61511a565b600080610c4183611330565b6001600160a01b0384166000908152600e6020526040902054909150805b601054811015610cc7578215610cb5576000818152600b602052604081206004015461271090610c8f9086615a9b565b610c999190615ab2565b9050610ca58186615ad4565b9450610cb18185615ae7565b9350505b80610cbf81615afa565b915050610c5f565b505050919050565b6001600160a01b0382166000908152600260205260408120805482919084908110610cfc57610cfc615b13565b906000526020600020906009020190506000816006015442610d1e9190615ae7565b60078301549091506001600160a01b03166000805b6001600160a01b038316600090815260036020526040902054811015610dfa576001600160a01b0383166000908152600360205260408120805483908110610d7d57610d7d615b13565b6000918252602082206002909102018054600182015460088a015492945090929091606490610dae90600a90615a9b565b610db89190615ab2565b9050828810610de557612710610dce8383615a9b565b610dd89190615ab2565b610de29087615ad4565b95505b5050505080610df390615afa565b9050610d33565b5093505050505b92915050565b610e0f615196565b6000610e1a33610c35565b905060008111610e455760405162461bcd60e51b8152600401610e3c90615b29565b60405180910390fd5b336000908152600c602052604081208054839290610e64908490615ae7565b925050819055508060116000828254610e7d9190615ae7565b9091555050601054336000908152600e6020908152604080832093909355601c90529081208054839290610eb2908490615ad4565b909155505060088054906000610ec783615afa565b9091555050336000908152600f6020908152604091829020825160808101845260085481529182018490526007549092820190610f049042615ad4565b8152600080516020615dd0833981519152602091820181905283546001808201865560009586528386208551600490930201918255848401519082015560408401516002820155606090930151600390930180546001600160a01b0319166001600160a01b0390941693909317909255908252600a9052600080516020615d308339815191528054839290610f9a908490615ad4565b90915550506040518181523390600080516020615d708339815191529060200160405180910390a250610fcb6151cc565b565b3360009081526020819052604090205460ff16610ffc5760405162461bcd60e51b8152600401610e3c90615b53565b6001600160a01b03811660009081526020819052604090205460ff166110505760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606401610e3c565b336001600160a01b0382160361109d5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb329039b2b63360711b6044820152606401610e3c565b6001600160a01b03166000908152602081905260409020805460ff19169055565b6110c6615196565b6000805b828110156112755760008484838181106110e6576110e6615b13565b3360009081526002602090815260409091205491029290920135925050811061110f5750611263565b33600090815260026020526040812080548390811061113057611130615b13565b90600052602060002090600902019050600061114c3384610ccf565b9050816004015481101561116257505050611263565b60008260040154826111749190615ae7565b9050806000036111875750505050611263565b8083600401600082825461119b9190615ad4565b909155506111ab90508187615ad4565b336000908152600f602052604090819020815160808101909252919750806111d687620f4240615ad4565b8152602001838152602001600754426111ef9190615ad4565b8152600080516020615dd0833981519152602091820152825460018082018555600094855293829020835160049092020190815590820151928101929092556040810151600283015560600151600390910180546001600160a01b0319166001600160a01b03909216919091179055505050505b8061126d81615afa565b9150506110ca565b5080156112ef57600080516020615dd08339815191526000908152600a602052600080516020615d3083398151915280548392906112b4908490615ad4565b909155505060405181815233907f4e69fdc49495bcab2b4375781457ba16653a90eb4ffb6588351bdc39071433e29060200160405180910390a25b506112f86151cc565b5050565b3360009081526020819052604090205460ff1661132b5760405162461bcd60e51b8152600401610e3c90615b53565b601655565b6001600160a01b0381166000908152600c6020908152604080832054601890925282205480821161136257600061136c565b61136c8183615ae7565b949350505050565b606080600083806001600160401b0381111561139257611392615b7b565b6040519080825280602002602001820160405280156113bb578160200160208202803683370190505b509350806001600160401b038111156113d6576113d6615b7b565b6040519080825280602002602001820160405280156113ff578160200160208202803683370190505b50925060005b8181101561155c57600087878381811061142157611421615b13565b9050602002016020810190611436919061544f565b6001600160a01b038116600090815260066020526040902054875191925090819088908590811061146957611469615b13565b6020908102919091018101919091526001600160a01b03808416600090815260049283905260408082205490516302c68be360e31b815291939216916316345f18916114b791879101615471565b602060405180830381865afa1580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f89190615b91565b90506000670de0b6b3a764000061150f8484615a9b565b6115199190615ab2565b90508088868151811061152e5761152e615b13565b60209081029190910101526115438188615ad4565b965050505050808061155490615afa565b915050611405565b50509250925092565b3360009081526020819052604090205460ff166115945760405162461bcd60e51b8152600401610e3c90615b53565b6115a86001600160a01b03831633836151dd565b6040518181526001600160a01b038316903390600080516020615e108339815191529060200160405180910390a35050565b6115e2615196565b6000805b336000908152600260205260409020548110156116ed5733600090815260026020526040812080548390811061161e5761161e615b13565b6000918252602090912060099091020160078101549091506001600160a01b03858116911614801561165c57506007810154600160a01b900460ff16155b156116da57600061166d338461277f565b905081600301548111156116d857600082600301548261168d9190615ae7565b90506116998186615ad4565b9450808360030160008282546116af9190615ad4565b909155505082546003840154106116d65760078301805460ff60a01b1916600160a01b1790555b505b505b50806116e581615afa565b9150506115e6565b506000811161170e5760405162461bcd60e51b8152600401610e3c90615b29565b336000908152600560205260409020541561181b576001600160a01b0380831660009081526004602081905260408083205490516302c68be360e31b81529293670de0b6b3a764000093869392909116916316345f189161177191899101615471565b602060405180830381865afa15801561178e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b29190615b91565b6117bc9190615a9b565b6117c69190615ab2565b3360009081526005602052604090205490915081106117f45733600090815260056020526040812055611819565b3360009081526005602052604081208054839290611813908490615ae7565b90915550505b505b6001600160a01b03821660009081526006602052604081208054839290611843908490615ae7565b9091555050336000908152600f60205260408082208151608081019092526009805491938392919061187483615afa565b919050558152602001838152602001600754426118919190615ad4565b81526001600160a01b0385811660209283018190528454600180820187556000968752848720865160049093020191825585850151908201556040808601516002830155606090950151600390910180546001600160a01b03191691909316179091558352600a90528120805483929061190c908490615ad4565b90915550506040513390600080516020615db0833981519152906119349084906000906155d7565b60405180910390a2506119456151cc565b50565b6019818154811061195857600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b3360009081526001602052604090205460ff166119af5760405162461bcd60e51b8152600401610e3c90615b53565b60005b6001600160a01b0382166000908152600260205260409020548110156112f8576001600160a01b03821660009081526002602052604081208054839081106119fc576119fc615b13565b906000526020600020906009020190508060070160149054906101000a900460ff16611ad05760088101546001600160a01b03841660009081526005602052604090205410611a785760088101546001600160a01b03841660009081526005602052604081208054909190611a72908490615ae7565b90915550505b805460078201546001600160a01b031660009081526006602052604090205410611ad057805460078201546001600160a01b031660009081526006602052604081208054909190611aca908490615ae7565b90915550505b600080825560018201819055600382018190556004820155600701805460ff60a01b1916600160a01b179055611b0581615afa565b90506119b2565b3360009081526020819052604090205460ff16611b3b5760405162461bcd60e51b8152600401610e3c90615b53565b601555565b60036020528160005260406000208181548110611b5c57600080fd5b600091825260209091206002909102018054600190910154909250905082565b611b84615196565b60008211611bc45760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642076616c756560981b6044820152606401610e3c565b60008111611be45760405162461bcd60e51b8152600401610e3c90615baa565b601554821015611c2c5760405162461bcd60e51b815260206004820152601360248201527256616c75652062656c6f77206d696e696d756d60681b6044820152606401610e3c565b6000611c3733611330565b905080831115611c595760405162461bcd60e51b8152600401610e3c90615bd6565b60088054906000611c6983615afa565b90915550506008543360009081526018602052604081208054869290611c90908490615ad4565b909155505060408051608081018252858152602080820186815233838501818152426060860190815260008381526014865287812089825286528781209651875593516001808801919091559151600280880180546001600160a01b039384166001600160a01b0319918216179091559251600390980197909755875180890190985292875293860187815260198054808401825594819052965193909502600080516020615e508339815191528101805494909316939094169290921790559151600080516020615d50833981519152909101559054611d719190615ae7565b336000818152601a6020908152604080832086845290915290819020929092559051600080516020615df083398151915290611db090869085906155d7565b60405180910390a250506112f86151cc565b60195460609081908190806001600160401b03811115611de457611de4615b7b565b604051908082528060200260200182016040528015611e0d578160200160208202803683370190505b509350806001600160401b03811115611e2857611e28615b7b565b604051908082528060200260200182016040528015611e51578160200160208202803683370190505b509250806001600160401b03811115611e6c57611e6c615b7b565b604051908082528060200260200182016040528015611ea557816020015b611e926153cc565b815260200190600190039081611e8a5790505b50915060005b81811015611fe257600060198281548110611ec857611ec8615b13565b60009182526020918290206040805180820190915260029092020180546001600160a01b0316808352600190910154928201929092528751909250879084908110611f1557611f15615b13565b60200260200101906001600160a01b031690816001600160a01b0316815250508060200151858381518110611f4c57611f4c615b13565b60209081029190910181019190915281516001600160a01b0390811660009081526014835260408082208585015183528452908190208151608081018352815481526001820154948101949094526002810154909216908301526003015460608201528451859084908110611fc357611fc3615b13565b6020026020010181905250508080611fda90615afa565b915050611eab565b5050909192565b3360009081526001602052604090205460ff166120185760405162461bcd60e51b8152600401610e3c90615b53565b600260008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518061014001604052808b81526020018a8152602001898152602001848152602001838152602001868152602001858152602001886001600160a01b03168152602001600015158152602001878152509080600181540180825580915050600190039060005260206000209060090201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160070160146101000a81548160ff0219169083151502179055506101208201518160080155505084600560008c6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461218e9190615ad4565b9091555061219e9050828a615ae7565b6001600160a01b038716600090815260066020526040812080549091906121c6908490615ad4565b909155505050505050505050505050565b3360009081526020819052604090205460ff166122065760405162461bcd60e51b8152600401610e3c90615b53565b6001600160a01b03918216600090815260046020526040902080546001600160a01b03191691909216179055565b3360009081526020819052604090205460ff166122635760405162461bcd60e51b8152600401610e3c90615b53565b6001600160a01b0381166122895760405162461bcd60e51b8152600401610e3c90615c06565b6001600160a01b03811660009081526020819052604090205460ff16156122e25760405162461bcd60e51b815260206004820152600d60248201526c20b63932b0b23c9037bbb732b960991b6044820152606401610e3c565b6001600160a01b03166000908152602081905260409020805460ff19166001179055565b6001600160a01b0381166000908152600260209081526040808320805482518185028101850190935280835260609492939192909184015b828210156123e257600084815260209081902060408051610140810182526009860290920180548352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a0840152600681015460c084015260078101546001600160a01b03811660e0850152600160a01b900460ff16151561010084015260080154610120830152908352909201910161233e565b505050509050919050565b6001600160a01b038116600090815260026020526040812054815b818110156125ba576001600160a01b038416600090815260026020526040812080548390811061243a5761243a615b13565b600091825260209182902060408051610140810182526009909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260078201546001600160a01b03811660e083015260ff600160a01b909104161515610100820181905260089092015461012082015291506125a75760e0810180516001600160a01b03908116600090815260046020819052604080832054945190516302c68be360e31b81529294909316926316345f189261251b9201615471565b602060405180830381865afa158015612538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255c9190615b91565b90506000826060015183600001516125749190615ae7565b90506000670de0b6b3a764000061258b8385615a9b565b6125959190615ab2565b90506125a18188615ad4565b96505050505b50806125b281615afa565b915050612408565b5050919050565b3360009081526020819052604090205460ff166125f05760405162461bcd60e51b8152600401610e3c90615b53565b6000601054116126385760405162461bcd60e51b81526020600482015260136024820152724e6f2065706f63687320746f2075706461746560681b6044820152606401610e3c565b600060016010546126499190615ae7565b9050600082156126935760008361266287612710615a9b565b61266c9190615ab2565b905082156126815761267e818661523a565b91505b601d5481111561269157601d8190555b505b6013548111156126b55760405162461bcd60e51b8152600401610e3c90615c2f565b6040805160c081018252878152602080820188815282840187815260608401898152608085018781524260a0870190815260008a8152600b9096529487902095518655925160018601559051600285015551600384015551600483015551600590910155518290600080516020615e708339815191529061273b90889085908990615c5f565b60405180910390a2505050505050565b3360009081526020819052604090205460ff1661277a5760405162461bcd60e51b8152600401610e3c90615b53565b601d55565b6001600160a01b03821660009081526002602052604081208054829190849081106127ac576127ac615b13565b9060005260206000209060090201905060008160060154426127ce9190615ae7565b60078301549091506001600160a01b03166000805b6001600160a01b038316600090815260036020526040902054811015610dfa576001600160a01b038316600090815260036020526040812080548390811061282d5761282d615b13565b60009182526020909120600290910201805460018201549192509081871061287757875461271090612860908390615a9b565b61286a9190615ab2565b6128749086615ad4565b94505b5050508061288490615afa565b90506127e3565b6000612895615281565b805490915060ff600160401b82041615906001600160401b03166000811580156128bc5750825b90506000826001600160401b031660011480156128d85750303b155b9050811580156128e6575080155b156129045760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561292d57845460ff60401b1916600160401b1785555b6129356152aa565b3360009081526020818152604082208054600160ff1991821681179092557f4cfa3c6903140891ecff713e237b1f1746362568dfb5e8e9bc37719e4f37e0c58054821683179055918190527f3e1f9e6abae6b647fdc3c5896ef1871ceb3c98e9e72852da3f17d161a860f76c80548316821790557f3517cbb3edfcef55b3b32be7021bc73ef070f4a8bad0d4b389b96924cf17b7418054831682179055738a9281ecece9b599c2f42d829c3d0d8e74b7083e9092527f968a1791ad31618c63b086103baa804af57c3ca0efa33a191010fbb7741579fc805490911690911790556203f48060075560646013556103e8601f558315612a6d57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b3360009081526020819052604090205460ff16612aa35760405162461bcd60e51b8152600401610e3c90615b53565b60008111612b015760405162461bcd60e51b815260206004820152602560248201527f4d61782070657263656e74616765206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610e3c565b601355565b3360009081526020819052604090205460ff16612b355760405162461bcd60e51b8152600401610e3c90615b53565b612b4e600080516020615dd083398151915233836151dd565b604051818152600080516020615dd0833981519152903390600080516020615e108339815191529060200160405180910390a350565b33600090815260146020908152604080832084845290915290208054612bbc5760405162461bcd60e51b8152600401610e3c90615c75565b60028101546001600160a01b03163314612be85760405162461bcd60e51b8152600401610e3c90615ca0565b805460165460009061271090612bfe9084615a9b565b612c089190615ab2565b33600090815260186020526040812080549293508492909190612c2c908490615ae7565b90915550508015612c7557336000908152600c602052604081208054839290612c56908490615ae7565b925050819055508060116000828254612c6f9190615ae7565b90915550505b8015612cbf57336001600160a01b03167f4725a4d4de9bff212d0885095e27515072f73f427df55e52f37f241321ef88f98286604051612cb69291906155d7565b60405180910390a25b336000818152601460209081526040808320888452825280832083815560018082018590556002820180546001600160a01b03191690556003909101849055938352601a82528083208884529091528120546019549092612d1f91615ae7565b9050808214612de057600060198281548110612d3d57612d3d615b13565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101549181019190915260198054919250829185908110612d8957612d89615b13565b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001909401939093558351168152601a8252604080822093830151825292909152208290555b6019805480612df157612df1615cc8565b600082815260208082206002600019949094019384020180546001600160a01b03191681556001018290559190925533808352601a825260408084208a85528352808420939093559151888152600080516020615d90833981519152910161273b565b606081831115612e965760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642072616e676560981b6044820152606401610e3c565b6010548210612edd5760405162461bcd60e51b8152602060048201526013602482015272115b9908195c1bd8da081b9bdd08199bdd5b99606a1b6044820152606401610e3c565b6000612ee98484615ae7565b612ef4906001615ad4565b90506000816001600160401b03811115612f1057612f10615b7b565b604051908082528060200260200182016040528015612f4957816020015b612f366153fd565b815260200190600190039081612f2e5790505b50905060005b82811015612fea57600b6000612f658389615ad4565b81526020019081526020016000206040518060c00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481525050828281518110612fcc57612fcc615b13565b60200260200101819052508080612fe290615afa565b915050612f4f565b50949350505050565b612ffb615196565b6000811161301b5760405162461bcd60e51b8152600401610e3c90615cde565b6000601254116130645760405162461bcd60e51b81526020600482015260146024820152734275796f7574206e6f7420617661696c61626c6560601b6044820152606401610e3c565b600061306f33611330565b9050808211156130915760405162461bcd60e51b8152600401610e3c90615bd6565b6127106130a0826109c4615a9b565b6130aa9190615ab2565b8210156130ea5760405162461bcd60e51b815260206004820152600e60248201526d416d6f756e7420746f6f206c6f7760901b6044820152606401610e3c565b6000612710601254846130fd9190615a9b565b6131079190615ab2565b336000908152600c602052604081208054929350859290919061312b908490615ae7565b9250508190555082601160008282546131449190615ae7565b9091555050336000908152601c602052604081208054839290613168908490615ad4565b90915550506008805490600061317d83615afa565b9091555050600854336000908152600f6020908152604091829020825160808101845284815291820185905260075490928201906131bb9042615ad4565b8152600080516020615dd0833981519152602091820181905283546001808201865560009586528386208551600490930201918255848401519082015560408401516002820155606090930151600390930180546001600160a01b0319166001600160a01b0390941693909317909255908252600a9052600080516020615d308339815191528054849290613251908490615ad4565b9091555050601f546000906127109061326a9082615ad4565b6132749085615a9b565b61327e9190615ab2565b60088054919250600061329083615afa565b90915550506008546040805160808101825287815260208082018581523083850181815242606086019081526000838152601486528781208982528652878120965187559351600187015590516002860180546001600160a01b0319166001600160a01b0390921691909117905551600390940193909355918252601890529081208054889290613322908490615ad4565b9091555050336000908152601e60209081526040808320868452825280832084905580518082019091523081529081018381526019805460018082018355948290529251600080516020615e50833981519152600290940293840180546001600160a01b0319166001600160a01b039092169190911790559051600080516020615d5083398151915290920191909155546133bd9190615ae7565b306000818152601a6020908152604080832086845290915290819020929092559051600080516020615df0833981519152906133fc90859085906155d7565b60405180910390a26040518481523390600080516020615d708339815191529060200160405180910390a250505050506119456151cc565b601b818154811061344457600080fd5b6000918252602090912060069091020180546001820154600283015460038401546004850154600590950154939550919390926001600160a01b03918216911686565b61348f6153cc565b506001600160a01b03918216600090815260146020908152604080832093835292815290829020825160808101845281548152600182015492810192909252600281015490931691810191909152600390910154606082015290565b3360009081526020819052604090205460ff1661351a5760405162461bcd60e51b8152600401610e3c90615b53565b61271081111561356c5760405162461bcd60e51b815260206004820152601d60248201527f50657263656e746167652063616e6e6f742065786365656420313030250000006044820152606401610e3c565b601255565b613579615196565b3360009081526002602052604090205481106135cf5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840eccae6e8d2dcce40d2dcc8caf605b1b6044820152606401610e3c565b3360009081526002602052604081208054839081106135f0576135f0615b13565b906000526020600020906009020190508060070160149054906101000a900460ff16156136525760405162461bcd60e51b815260206004820152601060248201526f56657374696e6720636f6d706c65746560801b6044820152606401610e3c565b600061365e338461277f565b905081600301548110156136ab5760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a590818db185a5b48185b5bdd5b9d60621b6044820152606401610e3c565b60008260030154826136bd9190615ae7565b9050600081116136df5760405162461bcd60e51b8152600401610e3c90615b29565b808360030160008282546136f39190615ad4565b9091555050825460038401541061371a5760078301805460ff60a01b1916600160a01b1790555b336000908152600560205260409020541561382b5760078301546001600160a01b0390811660008181526004602081905260408083205490516302c68be360e31b81529294670de0b6b3a764000094879492909116926316345f1892613781929101615471565b602060405180830381865afa15801561379e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c29190615b91565b6137cc9190615a9b565b6137d69190615ab2565b3360009081526005602052604090205490915081106138045733600090815260056020526040812055613829565b3360009081526005602052604081208054839290613823908490615ae7565b90915550505b505b60078301546001600160a01b031660009081526006602052604081208054839290613857908490615ae7565b9091555050336000908152600f60205260408082208151608081019092526009805491938392919061388883615afa565b919050558152602001838152602001600754426138a59190615ad4565b81526007860180546001600160a01b039081166020938401528454600180820187556000968752848720865160049093020191825585850151908201556040808601516002830155606090950151600390910180546001600160a01b0319169183169190911790559054168352600a905281208054839290613928908490615ad4565b90915550506040513390600080516020615db0833981519152906139509084906000906155d7565b60405180910390a25050506119456151cc565b613997604051806080016040528060008152602001600081526020016000815260200160006001600160a01b031681525090565b6001600160a01b0383166000908152600f60205260408120905b8154811015613a5c57838282815481106139cd576139cd615b13565b90600052602060002090600402016000015403613a4a578181815481106139f6576139f6615b13565b6000918252602091829020604080516080810182526004909302909101805483526001810154938301939093526002830154908201526003909101546001600160a01b031660608201529250610e01915050565b80613a5481615afa565b9150506139b1565b5060405162461bcd60e51b8152600401610e3c90615d06565b613a7d6153fd565b6010548210613ac05760405162461bcd60e51b815260206004820152600f60248201526e115c1bd8da081b9bdd08199bdd5b99608a1b6044820152606401610e3c565b506000908152600b6020908152604091829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a082015290565b60026020528160005260406000208181548110613b3557600080fd5b6000918252602090912060099091020180546001820154600283015460038401546004850154600586015460068701546007880154600890980154969950949750929591949093916001600160a01b03811691600160a01b90910460ff16908a565b6001600160a01b038216600090815260026020526040812080546060928392909185908110613bc857613bc8615b13565b600091825260208083206007600990930201918201546001600160a01b03168084526003909152604083205491935091816001600160401b03811115613c1057613c10615b7b565b604051908082528060200260200182016040528015613c39578160200160208202803683370190505b5090506000826001600160401b03811115613c5657613c56615b7b565b604051908082528060200260200182016040528015613c7f578160200160208202803683370190505b50905060005b83811015613d2c576001600160a01b0385166000908152600360205260408120805483908110613cb757613cb7615b13565b9060005260206000209060020201905080600001548760060154613cdb9190615ad4565b848381518110613ced57613ced615b13565b6020026020010181815250508060010154838381518110613d1057613d10615b13565b602090810291909101015250613d2581615afa565b9050613c85565b5090955093505050505b9250929050565b3360009081526020819052604090205460ff16613d6c5760405162461bcd60e51b8152600401610e3c90615b53565b60008115613db757600082613d8386612710615a9b565b613d8d9190615ab2565b60105490915015613da557613da2818561523a565b91505b601d54811115613db557601d8190555b505b601354811115613dd95760405162461bcd60e51b8152600401610e3c90615c2f565b6040805160c081018252868152602080820187815282840186815260608401888152608085018781524260a08701908152601080546000908152600b9097529588902096518755935160018701559151600286015551600385015551600484015551600590920191909155549051600080516020615e7083398151915290613e6690879085908890615c5f565b60405180910390a260108054906000613e7e83615afa565b91905055505050505050565b6000806000806000613e9b86610c35565b90506000613ea887611330565b6001600160a01b03979097166000908152600c6020908152604080832054600d9092529091205490989297965094509092505050565b6001600160a01b0381166000908152600f60209081526040808320805482518185028101850190935280835260609492939192909184015b828210156123e257600084815260209081902060408051608081018252600486029092018054835260018082015484860152600282015492840192909252600301546001600160a01b031660608301529083529092019101613f16565b600f6020528160005260406000208181548110613f8f57600080fd5b6000918252602090912060049091020180546001820154600283015460039093015491945092506001600160a01b031684565b3360009081526020819052604090205460ff16613ff15760405162461bcd60e51b8152600401610e3c90615b53565b600755565b601b5460609083106140465760405162461bcd60e51b8152602060048201526019602482015278537461727420696e646578206f7574206f6620626f756e647360381b6044820152606401610e3c565b60006140528385615ad4565b601b549091508111156140645750601b545b60006140708583615ae7565b6001600160401b0381111561408757614087615b7b565b60405190808252806020026020018201604052801561410357816020015b6140f06040518060c001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b8152602001906001900390816140a55790505b509050845b82811015612fea57601b818154811061412357614123615b13565b60009182526020918290206040805160c0810182526006909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546001600160a01b03908116608083015260059092015490911660a0820152826141918884615ae7565b815181106141a1576141a1615b13565b602002602001018190525080806141b790615afa565b915050614108565b6141c7615196565b336000908152600f60205260409020805461421a5760405162461bcd60e51b81526020600482015260136024820152724e6f207374616b657320617661696c61626c6560681b6044820152606401610e3c565b8161425f5760405162461bcd60e51b8152602060048201526015602482015274139bc81cdd185ad94812511cc81c1c9bdd9a591959605a1b6044820152606401610e3c565b60005b8281101561461057600084848381811061427e5761427e615b13565b9050602002013590506000805b84548110156145dd5760008582815481106142a8576142a8615b13565b906000526020600020906004020190508381600001541480156142cf575060008160010154115b156145ca5780600201544210156143175760405162461bcd60e51b815260206004820152600c60248201526b14dd185ad9481b1bd8dad95960a21b6044820152606401610e3c565b336000908152601e60209081526040808320878452909152902054801561453857306000908152601460209081526040808320848452909152902080541561451b578054306000908152601860205260408120805483929061437a908490615ae7565b9091555050306000818152601460209081526040808320878452825280832083815560018082018590556002820180546001600160a01b03191690556003909101849055938352601a825280832087845290915281205460195490926143df91615ae7565b90508082146144a0576000601982815481106143fd576143fd615b13565b60009182526020918290206040805180820190915260029092020180546001600160a01b0316825260010154918101919091526019805491925082918590811061444957614449615b13565b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001909401939093558351168152601a8252604080822093830151825292909152208290555b60198054806144b1576144b1615cc8565b600082815260208082206002600019949094019384020180546001600160a01b03191681556001018290559190925530808352601a825260408084208985528352808420939093559151878152600080516020615d90833981519152910160405180910390a25050505b50336000908152601e602090815260408083208884529091528120555b60018201805460038401546000928390556001600160a01b0316808352600a60205260408320805492939192849290614572908490615ae7565b9091555061458c90506001600160a01b03821633846151dd565b336001600160a01b0316600080516020615e3083398151915283896040516145b59291906155d7565b60405180910390a260019550505050506145dd565b50806145d581615afa565b91505061428b565b50806145fb5760405162461bcd60e51b8152600401610e3c90615d06565b5050808061460890615afa565b915050614262565b50506112f86151cc565b3360009081526020819052604090205460ff166146495760405162461bcd60e51b8152600401610e3c90615b53565b6113888111156146975760405162461bcd60e51b81526020600482015260196024820152785072656d69756d2063616e6e6f74206578636565642035302560381b6044820152606401610e3c565b601f55565b6060806000806146ab85611330565b6001600160a01b0386166000908152600e6020526040812054601054929350916146d6908390615ae7565b90508060000361470757505060408051600080825260208201818152828401909352909550909350915061486d9050565b806001600160401b0381111561471f5761471f615b7b565b604051908082528060200260200182016040528015614748578160200160208202803683370190505b509550806001600160401b0381111561476357614763615b7b565b60405190808252806020026020018201604052801561478c578160200160208202803683370190505b50945060005b818110156148685760006147a68285615ad4565b9050808883815181106147bb576147bb615b13565b60209081029190910101528415614834576000818152600b6020526040812060040154612710906147ec9088615a9b565b6147f69190615ab2565b90508088848151811061480b5761480b615b13565b60209081029190910101526148208188615ad4565b965061482c8187615ae7565b955050614855565b600087838151811061484857614848615b13565b6020026020010181815250505b508061486081615afa565b915050614792565b505050505b9193909250565b61487c615196565b6001600160a01b0382166000908152601460209081526040808320848452909152902080546148bd5760405162461bcd60e51b8152600401610e3c90615c75565b336001600160a01b0384160361490e5760405162461bcd60e51b815260206004820152601660248201527543616e6e6f7420627579206f776e206c697374696e6760501b6044820152606401610e3c565b805460018201546003830154600082841161492a576000614934565b6149348385615ae7565b905060008461494583612710615a9b565b61494f9190615ab2565b905060006127106149608380615a9b565b61496a9190615ab2565b9050600061271061497b8389615a9b565b6149859190615ab2565b905060006149938289615ae7565b90506149af600080516020615dd0833981519152338d8a6152ba565b336000908152600c602052604081205490036149d957601054336000908152600e60205260409020555b306001600160a01b038c1603614a3757336000908152600c602052604081208054839290614a08908490615ad4565b909155505030600090815260186020526040812080548a9290614a2c908490615ae7565b90915550614ab69050565b6001600160a01b038b166000908152600c6020526040812080548a9290614a5f908490615ae7565b9091555050336000908152600c602052604081208054839290614a83908490615ad4565b90915550506001600160a01b038b16600090815260186020526040812080548a9290614ab0908490615ae7565b90915550505b336000908152600d602052604081208054839290614ad5908490615ad4565b925050819055508160116000828254614aee9190615ae7565b90915550506001600160a01b038b1660009081526017602052604081208054899290614b1b908490615ad4565b92505081905550601b6040518060c001604052808881526020014281526020018a81526020018981526020018d6001600160a01b03168152602001336001600160a01b031681525090806001815401808255809150506001900390600052602060002090600602016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a08201518160050160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050601460008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008b815260200190815260200160002060008082016000905560018201600090556002820160006101000a8154906001600160a01b030219169055600382016000905550506000601a60008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c815260200190815260200160002054905060006001601980549050614cca9190615ae7565b9050808214614d8b57600060198281548110614ce857614ce8615b13565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101549181019190915260198054919250829185908110614d3457614d34615b13565b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001909401939093558351168152601a8252604080822093830151825292909152208290555b6019805480614d9c57614d9c615cc8565b6001900381819060005260206000209060020201600080820160006101000a8154906001600160a01b030219169055600182016000905550509055601a60008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d815260200190815260200160002060009055336001600160a01b03168d6001600160a01b03167f7bb39d095b04a9986ed34adf14d74c33294d0a9e807f02bf634d532507422eba8b8f604051614e569291906155d7565b60405180910390a350505050505050505050506112f86151cc565b33600090815260146020908152604080832085845290915290208054614ea95760405162461bcd60e51b8152600401610e3c90615c75565b60028101546001600160a01b03163314614ed55760405162461bcd60e51b8152600401610e3c90615ca0565b60008211614ef55760405162461bcd60e51b8152600401610e3c90615baa565b600181018290556040513390600080516020615df083398151915290614f1e90859087906155d7565b60405180910390a2505050565b3360009081526001602052604090205460ff16614f5a5760405162461bcd60e51b8152600401610e3c90615b53565b6001600160a01b038516614fa75760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642075736572206164647265737360601b6044820152606401610e3c565b60008411614fc75760405162461bcd60e51b8152600401610e3c90615cde565b6001600160a01b0382166150155760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401610e3c565b6008805490600061502583615afa565b919050555060008161503957600854615049565b60085461504990620f4240615ad4565b6001600160a01b038781166000908152600f6020908152604080832081516080810183528681528084018c81528184018c81528b881660608401818152855460018082018855968a52888a209551600490910290950194855592519484019490945551600283015551600390910180546001600160a01b0319169190961617909455928252600a9052908120805492935087929091906150ea908490615ad4565b92505081905550856001600160a01b0316600080516020615e30833981519152868360405161273b9291906155d7565b3360009081526020819052604090205460ff166151495760405162461bcd60e51b8152600401610e3c90615b53565b6001600160a01b03811661516f5760405162461bcd60e51b8152600401610e3c90615c06565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b60006151a06152f9565b8054909150600119016151c657604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60006151d66152f9565b6001905550565b61523583846001600160a01b031663a9059cbb85856040516024016152039291906155be565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061531d565b505050565b6000601d54831161524d57506000610e01565b6000601d548461525d9190615ae7565b9050600061271061526e8584615a9b565b6152789190615ab2565b95945050505050565b6000807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610e01565b6152b2615385565b610fcb6153aa565b6040516001600160a01b0384811660248301528381166044830152606482018390526152f39186918216906323b872dd90608401615203565b50505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b600080602060008451602086016000885af180615340576040513d6000823e3d81fd5b50506000513d91508115615358578060011415615365565b6001600160a01b0384163b155b156152f35783604051635274afe760e01b8152600401610e3c9190615471565b61538d6153b2565b610fcb57604051631afcd79f60e31b815260040160405180910390fd5b6151cc615385565b60006153bc615281565b54600160401b900460ff16919050565b6040518060800160405280600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356001600160a01b038116811461544a57600080fd5b919050565b60006020828403121561546157600080fd5b61546a82615433565b9392505050565b6001600160a01b0391909116815260200190565b6000806040838503121561549857600080fd5b6154a183615433565b946020939093013593505050565b60008083601f8401126154c157600080fd5b5081356001600160401b038111156154d857600080fd5b6020830191508360208260051b8501011115613d3657600080fd5b6000806020838503121561550657600080fd5b82356001600160401b0381111561551c57600080fd5b615528858286016154af565b90969095509350505050565b60006020828403121561554657600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561557d57815187529582019590820190600101615561565b509495945050505050565b60608152600061559b606083018661554d565b82810360208401526155ad818661554d565b915050826040830152949350505050565b6001600160a01b03929092168252602082015260400190565b918252602082015260400190565b600080604083850312156155f857600080fd5b50508035926020909101359150565b80518252602080820151908301526040808201516001600160a01b031690830152606090810151910152565b60608082528451908201819052600090608090818401906020808901855b838110156156765781516001600160a01b031685529382019390820190600101615651565b505085830381870152615689838961554d565b868103604088015287518082528289019450908201925060005b818110156156c6576156b6848651615607565b93820193928501926001016156a3565b50919998505050505050505050565b6000806000806000806000806000806101408b8d0312156156f557600080fd5b6156fe8b615433565b995060208b0135985060408b0135975060608b0135965061572160808c01615433565b999c989b50969995989760a0870135975060c08701359660e08101359650610100810135955061012001359350915050565b6000806040838503121561576657600080fd5b61576f83615433565b915061577d60208401615433565b90509250929050565b602080825282518282018190526000919060409081850190868401855b828110156158275781518051855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0808201519086015260e0808201516001600160a01b03169086015261010080820151151590860152610120908101519085015261014090930192908501906001016157a3565b5091979650505050505050565b6000806000806080858703121561584a57600080fd5b5050823594602084013594506040840135936060013592509050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301525050565b6020808252825182820181905260009190848201906040850190845b818110156158e2576158cf838551615866565b9284019260c092909201916001016158bc565b50909695505050505050565b60808101610e018284615607565b8051825260208082015190830152604080820151908301526060908101516001600160a01b0316910152565b60808101610e0182846158fc565b60c08101610e018284615866565b604081526000615957604083018561554d565b8281036020840152615278818561554d565b6020808252825182820181905260009190848201906040850190845b818110156158e2576159988385516158fc565b9284019260809290920191600101615985565b602080825282518282018190526000919060409081850190868401855b828110156158275781518051855286810151878601528581015186860152606080820151908601526080808201516001600160a01b039081169187019190915260a091820151169085015260c090930192908501906001016159c8565b600080600080600060a08688031215615a3d57600080fd5b615a4686615433565b94506020860135935060408601359250615a6260608701615433565b915060808601358015158114615a7757600080fd5b809150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610e0157610e01615a85565b600082615acf57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610e0157610e01615a85565b81810381811115610e0157610e01615a85565b600060018201615b0c57615b0c615a85565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60208082526010908201526f4e6f7468696e6720746f20636c61696d60801b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600060208284031215615ba357600080fd5b5051919050565b602080825260129082015271496e76616c69642073616c6520707269636560701b604082015260600190565b602080825260169082015275496e73756666696369656e74206e6574207374616b6560501b604082015260600190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b6020808252601690820152750aadcd8dec6d640e0cae4c6cadce8c2ceca40d0d2ced60531b604082015260600190565b9283526020830191909152604082015260600190565b602080825260119082015270131a5cdd1a5b99c81b9bdd08199bdd5b99607a1b604082015260600190565b6020808252600e908201526d2737ba103a34329039b2b63632b960911b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b6020808252600e908201526d125b9d985b1a5908185b5bdd5b9d60921b604082015260600190565b6020808252600f908201526e14dd185ad9481b9bdd08199bdd5b99608a1b60408201526060019056feb0775d57c3eeb070f58d410e36e9ff396813a5d76997d9a91bdf10f0798296f0944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9696a65a8b4f7f65a1063243d7f7e9e4da00ff767599acf21549ef2548a45d1695ae73d12dec3eb3b445b6c9feb2fd559ba7c852c525bc1e59d8f7ff760c55df041d4a94c2c356e29a6583071e731bdacf2ca56565ba5efebcff6936eb7923b5172100000000000000000000000055d398326f99059ff775485246999027b31979558e79b7ba8dab5ebfa59b9c6af1743c3ef14863680b3cc5ac837f8d636f76031ca92ff919b850e4909ab2261d907ef955f11bc1716733a6cbece38d163a69af8a933735aa8de6d7547d0126171b2f31b9c34dd00f3ecd4be85a0ba047db4fafef944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695eadbedb993dfca23e4c79bf4fa5fe531c2e0e926258fabb8445e8bc5c472780fa2646970667358221220bb5fd67f72c116610f5fc1a7ff83ac5a9d2a17e514afc9da84216c16e77b9c5864736f6c63430008140033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103845760003560e01c8062159da61461038957806301374518146103af578063022914a7146103e55780630519da3214610418578063092c7610146104215780630a84096a146104415780630a910a6d146104545780630c7d63861461045d57806313baee5b14610467578063173825d9146104875780631764303d1461049a5780631aefa2d1146104ad5780631eb9e53e146104c05780632ded58aa146104d35780632e46fed8146104dc5780633ba8396e146105055780633c92f98d146105285780633e4bc6bc1461054a5780633f35e7221461055357806343a32f891461056657806343c7c011146105e1578063441a4175146105f457806348ea286d146106155780634a61f1e51461062857806351e624721461064857806351f6cf2f1461065b578063581162271461067c578063592d1dd11461068f57806361d1080b146106af57806362cd6a09146106b757806363624c83146106ce57806367a74ddc146106e15780636ef569a5146106f45780637065cb48146106fd57806375060a0b146107105780637a0c6dc0146107305780637bc221ac146107505780637e6d9926146107635780637ee612551461078c57806380259e691461079f57806380ca0ecf146107b25780638129fc1c146107c557806382b75681146107cd57806384e8520a146107e0578063853e0df2146108005780638939d787146108135780638f82818f1461081c578063953d16bf1461083c57806396fd111a1461084f5780639cb6f5561461086f5780639f3a676c14610882578063a0d46758146108ce578063aaf4b04d146108ee578063ac97b41714610901578063af8ee6be14610914578063b6c3dc4c1461093f578063bc0bc6ba1461095f578063bd84477d1461097f578063bed9757e146109e7578063c0c07d1714610a08578063c267660314610a1b578063c32d3ae214610a23578063c6b61e4c14610a56578063c7b530b014610ac6578063ca6c627c14610ae6578063cc573a9114610aef578063ce13d09014610b2b578063cfcf331914610b3e578063d532bdfe14610b5e578063da1b436414610b71578063dfe3cc7c14610b91578063e88f8e6614610ba4578063eacdc5ff14610bb7578063eb44e0a314610bc0578063ef5d9ae814610bd3578063f2bb563014610bf3578063fe2f50d014610c06578063fee6018c14610c0f578063ffecf51614610c22575b600080fd5b61039c61039736600461544f565b610c35565b6040519081526020015b60405180910390f35b6103d86103bd36600461544f565b6004602052600090815260409020546001600160a01b031681565b6040516103a69190615471565b6104086103f336600461544f565b60006020819052908152604090205460ff1681565b60405190151581526020016103a6565b61039c60075481565b61039c61042f36600461544f565b60066020526000908152604090205481565b61039c61044f366004615485565b610ccf565b61039c60125481565b610465610e07565b005b61039c61047536600461544f565b600c6020526000908152604090205481565b61046561049536600461544f565b610fcd565b6104656104a83660046154f3565b6110be565b6104656104bb366004615534565b6112fc565b61039c6104ce36600461544f565b611330565b61039c60115481565b61039c6104ea36600461544f565b6001600160a01b03166000908152601c602052604090205490565b61040861051336600461544f565b60016020526000908152604090205460ff1681565b61053b6105363660046154f3565b611374565b6040516103a693929190615588565b61039c601d5481565b610465610561366004615485565b611565565b6105b2610574366004615485565b60146020908152600092835260408084209091529082529020805460018201546002830154600390930154919290916001600160a01b039091169084565b6040516103a6949392919093845260208401929092526001600160a01b03166040830152606082015260800190565b6104656105ef36600461544f565b6115da565b610607610602366004615534565b611948565b6040516103a69291906155be565b61046561062336600461544f565b611980565b61039c61063636600461544f565b60186020526000908152604090205481565b610465610656366004615534565b611b0c565b61066e610669366004615485565b611b40565b6040516103a69291906155d7565b61046561068a3660046155e5565b611b7c565b61039c61069d36600461544f565b60056020526000908152604090205481565b601b5461039c565b6106bf611dc2565b6040516103a693929190615633565b6104656106dc3660046156d5565b611fe9565b6104656106ef366004615753565b6121d7565b61039c60165481565b61046561070b36600461544f565b612234565b61039c61071e36600461544f565b600a6020526000908152604090205481565b61074361073e36600461544f565b612306565b6040516103a69190615786565b61039c61075e36600461544f565b6123ed565b61039c61077136600461544f565b6001600160a01b031660009081526017602052604090205490565b61046561079a366004615834565b6125c1565b6104656107ad366004615534565b61274b565b61039c6107c0366004615485565b61277f565b61046561288b565b6104656107db366004615534565b612a74565b61039c6107ee36600461544f565b600d6020526000908152604090205481565b61046561080e366004615534565b612b06565b61039c60135481565b61039c61082a36600461544f565b60176020526000908152604090205481565b61046561084a366004615534565b612b84565b61086261085d3660046155e5565b612e54565b6040516103a691906158a0565b61046561087d366004615534565b612ff3565b610895610890366004615534565b613434565b6040805196875260208701959095529385019290925260608401526001600160a01b0390811660808401521660a082015260c0016103a6565b6108e16108dc366004615485565b613487565b6040516103a691906158ee565b6104656108fc366004615534565b6134eb565b61046561090f366004615534565b613571565b61039c610922366004615485565b601e60209081526000928352604080842090915290825290205481565b61095261094d366004615485565b613963565b6040516103a69190615928565b61097261096d366004615534565b613a75565b6040516103a69190615936565b61099261098d366004615485565b613b19565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c08501526001600160a01b031660e08401521515610100830152610120820152610140016103a6565b6109fa6109f5366004615485565b613b97565b6040516103a6929190615944565b610465610a16366004615834565b613d3d565b6103eb61039c565b610a36610a3136600461544f565b613e8a565b6040805194855260208501939093529183015260608201526080016103a6565b610a99610a64366004615534565b600b60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016103a6565b610ad9610ad436600461544f565b613ede565b6040516103a69190615969565b61039c601f5481565b610b02610afd366004615485565b613f73565b604080519485526020850193909352918301526001600160a01b031660608201526080016103a6565b610465610b39366004615534565b613fc2565b610b51610b4c3660046155e5565b613ff6565b6040516103a691906159ab565b610465610b6c3660046154f3565b6141bf565b61039c610b7f36600461544f565b600e6020526000908152604090205481565b610465610b9f366004615534565b61461a565b61053b610bb236600461544f565b61469c565b61039c60105481565b610465610bce366004615485565b614874565b61039c610be136600461544f565b601c6020526000908152604090205481565b610465610c013660046155e5565b614e71565b61039c60155481565b610465610c1d366004615a25565b614f2b565b610465610c3036600461544f565b61511a565b600080610c4183611330565b6001600160a01b0384166000908152600e6020526040902054909150805b601054811015610cc7578215610cb5576000818152600b602052604081206004015461271090610c8f9086615a9b565b610c999190615ab2565b9050610ca58186615ad4565b9450610cb18185615ae7565b9350505b80610cbf81615afa565b915050610c5f565b505050919050565b6001600160a01b0382166000908152600260205260408120805482919084908110610cfc57610cfc615b13565b906000526020600020906009020190506000816006015442610d1e9190615ae7565b60078301549091506001600160a01b03166000805b6001600160a01b038316600090815260036020526040902054811015610dfa576001600160a01b0383166000908152600360205260408120805483908110610d7d57610d7d615b13565b6000918252602082206002909102018054600182015460088a015492945090929091606490610dae90600a90615a9b565b610db89190615ab2565b9050828810610de557612710610dce8383615a9b565b610dd89190615ab2565b610de29087615ad4565b95505b5050505080610df390615afa565b9050610d33565b5093505050505b92915050565b610e0f615196565b6000610e1a33610c35565b905060008111610e455760405162461bcd60e51b8152600401610e3c90615b29565b60405180910390fd5b336000908152600c602052604081208054839290610e64908490615ae7565b925050819055508060116000828254610e7d9190615ae7565b9091555050601054336000908152600e6020908152604080832093909355601c90529081208054839290610eb2908490615ad4565b909155505060088054906000610ec783615afa565b9091555050336000908152600f6020908152604091829020825160808101845260085481529182018490526007549092820190610f049042615ad4565b8152600080516020615dd0833981519152602091820181905283546001808201865560009586528386208551600490930201918255848401519082015560408401516002820155606090930151600390930180546001600160a01b0319166001600160a01b0390941693909317909255908252600a9052600080516020615d308339815191528054839290610f9a908490615ad4565b90915550506040518181523390600080516020615d708339815191529060200160405180910390a250610fcb6151cc565b565b3360009081526020819052604090205460ff16610ffc5760405162461bcd60e51b8152600401610e3c90615b53565b6001600160a01b03811660009081526020819052604090205460ff166110505760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606401610e3c565b336001600160a01b0382160361109d5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb329039b2b63360711b6044820152606401610e3c565b6001600160a01b03166000908152602081905260409020805460ff19169055565b6110c6615196565b6000805b828110156112755760008484838181106110e6576110e6615b13565b3360009081526002602090815260409091205491029290920135925050811061110f5750611263565b33600090815260026020526040812080548390811061113057611130615b13565b90600052602060002090600902019050600061114c3384610ccf565b9050816004015481101561116257505050611263565b60008260040154826111749190615ae7565b9050806000036111875750505050611263565b8083600401600082825461119b9190615ad4565b909155506111ab90508187615ad4565b336000908152600f602052604090819020815160808101909252919750806111d687620f4240615ad4565b8152602001838152602001600754426111ef9190615ad4565b8152600080516020615dd0833981519152602091820152825460018082018555600094855293829020835160049092020190815590820151928101929092556040810151600283015560600151600390910180546001600160a01b0319166001600160a01b03909216919091179055505050505b8061126d81615afa565b9150506110ca565b5080156112ef57600080516020615dd08339815191526000908152600a602052600080516020615d3083398151915280548392906112b4908490615ad4565b909155505060405181815233907f4e69fdc49495bcab2b4375781457ba16653a90eb4ffb6588351bdc39071433e29060200160405180910390a25b506112f86151cc565b5050565b3360009081526020819052604090205460ff1661132b5760405162461bcd60e51b8152600401610e3c90615b53565b601655565b6001600160a01b0381166000908152600c6020908152604080832054601890925282205480821161136257600061136c565b61136c8183615ae7565b949350505050565b606080600083806001600160401b0381111561139257611392615b7b565b6040519080825280602002602001820160405280156113bb578160200160208202803683370190505b509350806001600160401b038111156113d6576113d6615b7b565b6040519080825280602002602001820160405280156113ff578160200160208202803683370190505b50925060005b8181101561155c57600087878381811061142157611421615b13565b9050602002016020810190611436919061544f565b6001600160a01b038116600090815260066020526040902054875191925090819088908590811061146957611469615b13565b6020908102919091018101919091526001600160a01b03808416600090815260049283905260408082205490516302c68be360e31b815291939216916316345f18916114b791879101615471565b602060405180830381865afa1580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f89190615b91565b90506000670de0b6b3a764000061150f8484615a9b565b6115199190615ab2565b90508088868151811061152e5761152e615b13565b60209081029190910101526115438188615ad4565b965050505050808061155490615afa565b915050611405565b50509250925092565b3360009081526020819052604090205460ff166115945760405162461bcd60e51b8152600401610e3c90615b53565b6115a86001600160a01b03831633836151dd565b6040518181526001600160a01b038316903390600080516020615e108339815191529060200160405180910390a35050565b6115e2615196565b6000805b336000908152600260205260409020548110156116ed5733600090815260026020526040812080548390811061161e5761161e615b13565b6000918252602090912060099091020160078101549091506001600160a01b03858116911614801561165c57506007810154600160a01b900460ff16155b156116da57600061166d338461277f565b905081600301548111156116d857600082600301548261168d9190615ae7565b90506116998186615ad4565b9450808360030160008282546116af9190615ad4565b909155505082546003840154106116d65760078301805460ff60a01b1916600160a01b1790555b505b505b50806116e581615afa565b9150506115e6565b506000811161170e5760405162461bcd60e51b8152600401610e3c90615b29565b336000908152600560205260409020541561181b576001600160a01b0380831660009081526004602081905260408083205490516302c68be360e31b81529293670de0b6b3a764000093869392909116916316345f189161177191899101615471565b602060405180830381865afa15801561178e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b29190615b91565b6117bc9190615a9b565b6117c69190615ab2565b3360009081526005602052604090205490915081106117f45733600090815260056020526040812055611819565b3360009081526005602052604081208054839290611813908490615ae7565b90915550505b505b6001600160a01b03821660009081526006602052604081208054839290611843908490615ae7565b9091555050336000908152600f60205260408082208151608081019092526009805491938392919061187483615afa565b919050558152602001838152602001600754426118919190615ad4565b81526001600160a01b0385811660209283018190528454600180820187556000968752848720865160049093020191825585850151908201556040808601516002830155606090950151600390910180546001600160a01b03191691909316179091558352600a90528120805483929061190c908490615ad4565b90915550506040513390600080516020615db0833981519152906119349084906000906155d7565b60405180910390a2506119456151cc565b50565b6019818154811061195857600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b3360009081526001602052604090205460ff166119af5760405162461bcd60e51b8152600401610e3c90615b53565b60005b6001600160a01b0382166000908152600260205260409020548110156112f8576001600160a01b03821660009081526002602052604081208054839081106119fc576119fc615b13565b906000526020600020906009020190508060070160149054906101000a900460ff16611ad05760088101546001600160a01b03841660009081526005602052604090205410611a785760088101546001600160a01b03841660009081526005602052604081208054909190611a72908490615ae7565b90915550505b805460078201546001600160a01b031660009081526006602052604090205410611ad057805460078201546001600160a01b031660009081526006602052604081208054909190611aca908490615ae7565b90915550505b600080825560018201819055600382018190556004820155600701805460ff60a01b1916600160a01b179055611b0581615afa565b90506119b2565b3360009081526020819052604090205460ff16611b3b5760405162461bcd60e51b8152600401610e3c90615b53565b601555565b60036020528160005260406000208181548110611b5c57600080fd5b600091825260209091206002909102018054600190910154909250905082565b611b84615196565b60008211611bc45760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642076616c756560981b6044820152606401610e3c565b60008111611be45760405162461bcd60e51b8152600401610e3c90615baa565b601554821015611c2c5760405162461bcd60e51b815260206004820152601360248201527256616c75652062656c6f77206d696e696d756d60681b6044820152606401610e3c565b6000611c3733611330565b905080831115611c595760405162461bcd60e51b8152600401610e3c90615bd6565b60088054906000611c6983615afa565b90915550506008543360009081526018602052604081208054869290611c90908490615ad4565b909155505060408051608081018252858152602080820186815233838501818152426060860190815260008381526014865287812089825286528781209651875593516001808801919091559151600280880180546001600160a01b039384166001600160a01b0319918216179091559251600390980197909755875180890190985292875293860187815260198054808401825594819052965193909502600080516020615e508339815191528101805494909316939094169290921790559151600080516020615d50833981519152909101559054611d719190615ae7565b336000818152601a6020908152604080832086845290915290819020929092559051600080516020615df083398151915290611db090869085906155d7565b60405180910390a250506112f86151cc565b60195460609081908190806001600160401b03811115611de457611de4615b7b565b604051908082528060200260200182016040528015611e0d578160200160208202803683370190505b509350806001600160401b03811115611e2857611e28615b7b565b604051908082528060200260200182016040528015611e51578160200160208202803683370190505b509250806001600160401b03811115611e6c57611e6c615b7b565b604051908082528060200260200182016040528015611ea557816020015b611e926153cc565b815260200190600190039081611e8a5790505b50915060005b81811015611fe257600060198281548110611ec857611ec8615b13565b60009182526020918290206040805180820190915260029092020180546001600160a01b0316808352600190910154928201929092528751909250879084908110611f1557611f15615b13565b60200260200101906001600160a01b031690816001600160a01b0316815250508060200151858381518110611f4c57611f4c615b13565b60209081029190910181019190915281516001600160a01b0390811660009081526014835260408082208585015183528452908190208151608081018352815481526001820154948101949094526002810154909216908301526003015460608201528451859084908110611fc357611fc3615b13565b6020026020010181905250508080611fda90615afa565b915050611eab565b5050909192565b3360009081526001602052604090205460ff166120185760405162461bcd60e51b8152600401610e3c90615b53565b600260008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518061014001604052808b81526020018a8152602001898152602001848152602001838152602001868152602001858152602001886001600160a01b03168152602001600015158152602001878152509080600181540180825580915050600190039060005260206000209060090201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160070160146101000a81548160ff0219169083151502179055506101208201518160080155505084600560008c6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461218e9190615ad4565b9091555061219e9050828a615ae7565b6001600160a01b038716600090815260066020526040812080549091906121c6908490615ad4565b909155505050505050505050505050565b3360009081526020819052604090205460ff166122065760405162461bcd60e51b8152600401610e3c90615b53565b6001600160a01b03918216600090815260046020526040902080546001600160a01b03191691909216179055565b3360009081526020819052604090205460ff166122635760405162461bcd60e51b8152600401610e3c90615b53565b6001600160a01b0381166122895760405162461bcd60e51b8152600401610e3c90615c06565b6001600160a01b03811660009081526020819052604090205460ff16156122e25760405162461bcd60e51b815260206004820152600d60248201526c20b63932b0b23c9037bbb732b960991b6044820152606401610e3c565b6001600160a01b03166000908152602081905260409020805460ff19166001179055565b6001600160a01b0381166000908152600260209081526040808320805482518185028101850190935280835260609492939192909184015b828210156123e257600084815260209081902060408051610140810182526009860290920180548352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a0840152600681015460c084015260078101546001600160a01b03811660e0850152600160a01b900460ff16151561010084015260080154610120830152908352909201910161233e565b505050509050919050565b6001600160a01b038116600090815260026020526040812054815b818110156125ba576001600160a01b038416600090815260026020526040812080548390811061243a5761243a615b13565b600091825260209182902060408051610140810182526009909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260078201546001600160a01b03811660e083015260ff600160a01b909104161515610100820181905260089092015461012082015291506125a75760e0810180516001600160a01b03908116600090815260046020819052604080832054945190516302c68be360e31b81529294909316926316345f189261251b9201615471565b602060405180830381865afa158015612538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255c9190615b91565b90506000826060015183600001516125749190615ae7565b90506000670de0b6b3a764000061258b8385615a9b565b6125959190615ab2565b90506125a18188615ad4565b96505050505b50806125b281615afa565b915050612408565b5050919050565b3360009081526020819052604090205460ff166125f05760405162461bcd60e51b8152600401610e3c90615b53565b6000601054116126385760405162461bcd60e51b81526020600482015260136024820152724e6f2065706f63687320746f2075706461746560681b6044820152606401610e3c565b600060016010546126499190615ae7565b9050600082156126935760008361266287612710615a9b565b61266c9190615ab2565b905082156126815761267e818661523a565b91505b601d5481111561269157601d8190555b505b6013548111156126b55760405162461bcd60e51b8152600401610e3c90615c2f565b6040805160c081018252878152602080820188815282840187815260608401898152608085018781524260a0870190815260008a8152600b9096529487902095518655925160018601559051600285015551600384015551600483015551600590910155518290600080516020615e708339815191529061273b90889085908990615c5f565b60405180910390a2505050505050565b3360009081526020819052604090205460ff1661277a5760405162461bcd60e51b8152600401610e3c90615b53565b601d55565b6001600160a01b03821660009081526002602052604081208054829190849081106127ac576127ac615b13565b9060005260206000209060090201905060008160060154426127ce9190615ae7565b60078301549091506001600160a01b03166000805b6001600160a01b038316600090815260036020526040902054811015610dfa576001600160a01b038316600090815260036020526040812080548390811061282d5761282d615b13565b60009182526020909120600290910201805460018201549192509081871061287757875461271090612860908390615a9b565b61286a9190615ab2565b6128749086615ad4565b94505b5050508061288490615afa565b90506127e3565b6000612895615281565b805490915060ff600160401b82041615906001600160401b03166000811580156128bc5750825b90506000826001600160401b031660011480156128d85750303b155b9050811580156128e6575080155b156129045760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561292d57845460ff60401b1916600160401b1785555b6129356152aa565b3360009081526020818152604082208054600160ff1991821681179092557f4cfa3c6903140891ecff713e237b1f1746362568dfb5e8e9bc37719e4f37e0c58054821683179055918190527f3e1f9e6abae6b647fdc3c5896ef1871ceb3c98e9e72852da3f17d161a860f76c80548316821790557f3517cbb3edfcef55b3b32be7021bc73ef070f4a8bad0d4b389b96924cf17b7418054831682179055738a9281ecece9b599c2f42d829c3d0d8e74b7083e9092527f968a1791ad31618c63b086103baa804af57c3ca0efa33a191010fbb7741579fc805490911690911790556203f48060075560646013556103e8601f558315612a6d57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b3360009081526020819052604090205460ff16612aa35760405162461bcd60e51b8152600401610e3c90615b53565b60008111612b015760405162461bcd60e51b815260206004820152602560248201527f4d61782070657263656e74616765206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610e3c565b601355565b3360009081526020819052604090205460ff16612b355760405162461bcd60e51b8152600401610e3c90615b53565b612b4e600080516020615dd083398151915233836151dd565b604051818152600080516020615dd0833981519152903390600080516020615e108339815191529060200160405180910390a350565b33600090815260146020908152604080832084845290915290208054612bbc5760405162461bcd60e51b8152600401610e3c90615c75565b60028101546001600160a01b03163314612be85760405162461bcd60e51b8152600401610e3c90615ca0565b805460165460009061271090612bfe9084615a9b565b612c089190615ab2565b33600090815260186020526040812080549293508492909190612c2c908490615ae7565b90915550508015612c7557336000908152600c602052604081208054839290612c56908490615ae7565b925050819055508060116000828254612c6f9190615ae7565b90915550505b8015612cbf57336001600160a01b03167f4725a4d4de9bff212d0885095e27515072f73f427df55e52f37f241321ef88f98286604051612cb69291906155d7565b60405180910390a25b336000818152601460209081526040808320888452825280832083815560018082018590556002820180546001600160a01b03191690556003909101849055938352601a82528083208884529091528120546019549092612d1f91615ae7565b9050808214612de057600060198281548110612d3d57612d3d615b13565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101549181019190915260198054919250829185908110612d8957612d89615b13565b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001909401939093558351168152601a8252604080822093830151825292909152208290555b6019805480612df157612df1615cc8565b600082815260208082206002600019949094019384020180546001600160a01b03191681556001018290559190925533808352601a825260408084208a85528352808420939093559151888152600080516020615d90833981519152910161273b565b606081831115612e965760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642072616e676560981b6044820152606401610e3c565b6010548210612edd5760405162461bcd60e51b8152602060048201526013602482015272115b9908195c1bd8da081b9bdd08199bdd5b99606a1b6044820152606401610e3c565b6000612ee98484615ae7565b612ef4906001615ad4565b90506000816001600160401b03811115612f1057612f10615b7b565b604051908082528060200260200182016040528015612f4957816020015b612f366153fd565b815260200190600190039081612f2e5790505b50905060005b82811015612fea57600b6000612f658389615ad4565b81526020019081526020016000206040518060c00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481525050828281518110612fcc57612fcc615b13565b60200260200101819052508080612fe290615afa565b915050612f4f565b50949350505050565b612ffb615196565b6000811161301b5760405162461bcd60e51b8152600401610e3c90615cde565b6000601254116130645760405162461bcd60e51b81526020600482015260146024820152734275796f7574206e6f7420617661696c61626c6560601b6044820152606401610e3c565b600061306f33611330565b9050808211156130915760405162461bcd60e51b8152600401610e3c90615bd6565b6127106130a0826109c4615a9b565b6130aa9190615ab2565b8210156130ea5760405162461bcd60e51b815260206004820152600e60248201526d416d6f756e7420746f6f206c6f7760901b6044820152606401610e3c565b6000612710601254846130fd9190615a9b565b6131079190615ab2565b336000908152600c602052604081208054929350859290919061312b908490615ae7565b9250508190555082601160008282546131449190615ae7565b9091555050336000908152601c602052604081208054839290613168908490615ad4565b90915550506008805490600061317d83615afa565b9091555050600854336000908152600f6020908152604091829020825160808101845284815291820185905260075490928201906131bb9042615ad4565b8152600080516020615dd0833981519152602091820181905283546001808201865560009586528386208551600490930201918255848401519082015560408401516002820155606090930151600390930180546001600160a01b0319166001600160a01b0390941693909317909255908252600a9052600080516020615d308339815191528054849290613251908490615ad4565b9091555050601f546000906127109061326a9082615ad4565b6132749085615a9b565b61327e9190615ab2565b60088054919250600061329083615afa565b90915550506008546040805160808101825287815260208082018581523083850181815242606086019081526000838152601486528781208982528652878120965187559351600187015590516002860180546001600160a01b0319166001600160a01b0390921691909117905551600390940193909355918252601890529081208054889290613322908490615ad4565b9091555050336000908152601e60209081526040808320868452825280832084905580518082019091523081529081018381526019805460018082018355948290529251600080516020615e50833981519152600290940293840180546001600160a01b0319166001600160a01b039092169190911790559051600080516020615d5083398151915290920191909155546133bd9190615ae7565b306000818152601a6020908152604080832086845290915290819020929092559051600080516020615df0833981519152906133fc90859085906155d7565b60405180910390a26040518481523390600080516020615d708339815191529060200160405180910390a250505050506119456151cc565b601b818154811061344457600080fd5b6000918252602090912060069091020180546001820154600283015460038401546004850154600590950154939550919390926001600160a01b03918216911686565b61348f6153cc565b506001600160a01b03918216600090815260146020908152604080832093835292815290829020825160808101845281548152600182015492810192909252600281015490931691810191909152600390910154606082015290565b3360009081526020819052604090205460ff1661351a5760405162461bcd60e51b8152600401610e3c90615b53565b61271081111561356c5760405162461bcd60e51b815260206004820152601d60248201527f50657263656e746167652063616e6e6f742065786365656420313030250000006044820152606401610e3c565b601255565b613579615196565b3360009081526002602052604090205481106135cf5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840eccae6e8d2dcce40d2dcc8caf605b1b6044820152606401610e3c565b3360009081526002602052604081208054839081106135f0576135f0615b13565b906000526020600020906009020190508060070160149054906101000a900460ff16156136525760405162461bcd60e51b815260206004820152601060248201526f56657374696e6720636f6d706c65746560801b6044820152606401610e3c565b600061365e338461277f565b905081600301548110156136ab5760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a590818db185a5b48185b5bdd5b9d60621b6044820152606401610e3c565b60008260030154826136bd9190615ae7565b9050600081116136df5760405162461bcd60e51b8152600401610e3c90615b29565b808360030160008282546136f39190615ad4565b9091555050825460038401541061371a5760078301805460ff60a01b1916600160a01b1790555b336000908152600560205260409020541561382b5760078301546001600160a01b0390811660008181526004602081905260408083205490516302c68be360e31b81529294670de0b6b3a764000094879492909116926316345f1892613781929101615471565b602060405180830381865afa15801561379e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c29190615b91565b6137cc9190615a9b565b6137d69190615ab2565b3360009081526005602052604090205490915081106138045733600090815260056020526040812055613829565b3360009081526005602052604081208054839290613823908490615ae7565b90915550505b505b60078301546001600160a01b031660009081526006602052604081208054839290613857908490615ae7565b9091555050336000908152600f60205260408082208151608081019092526009805491938392919061388883615afa565b919050558152602001838152602001600754426138a59190615ad4565b81526007860180546001600160a01b039081166020938401528454600180820187556000968752848720865160049093020191825585850151908201556040808601516002830155606090950151600390910180546001600160a01b0319169183169190911790559054168352600a905281208054839290613928908490615ad4565b90915550506040513390600080516020615db0833981519152906139509084906000906155d7565b60405180910390a25050506119456151cc565b613997604051806080016040528060008152602001600081526020016000815260200160006001600160a01b031681525090565b6001600160a01b0383166000908152600f60205260408120905b8154811015613a5c57838282815481106139cd576139cd615b13565b90600052602060002090600402016000015403613a4a578181815481106139f6576139f6615b13565b6000918252602091829020604080516080810182526004909302909101805483526001810154938301939093526002830154908201526003909101546001600160a01b031660608201529250610e01915050565b80613a5481615afa565b9150506139b1565b5060405162461bcd60e51b8152600401610e3c90615d06565b613a7d6153fd565b6010548210613ac05760405162461bcd60e51b815260206004820152600f60248201526e115c1bd8da081b9bdd08199bdd5b99608a1b6044820152606401610e3c565b506000908152600b6020908152604091829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a082015290565b60026020528160005260406000208181548110613b3557600080fd5b6000918252602090912060099091020180546001820154600283015460038401546004850154600586015460068701546007880154600890980154969950949750929591949093916001600160a01b03811691600160a01b90910460ff16908a565b6001600160a01b038216600090815260026020526040812080546060928392909185908110613bc857613bc8615b13565b600091825260208083206007600990930201918201546001600160a01b03168084526003909152604083205491935091816001600160401b03811115613c1057613c10615b7b565b604051908082528060200260200182016040528015613c39578160200160208202803683370190505b5090506000826001600160401b03811115613c5657613c56615b7b565b604051908082528060200260200182016040528015613c7f578160200160208202803683370190505b50905060005b83811015613d2c576001600160a01b0385166000908152600360205260408120805483908110613cb757613cb7615b13565b9060005260206000209060020201905080600001548760060154613cdb9190615ad4565b848381518110613ced57613ced615b13565b6020026020010181815250508060010154838381518110613d1057613d10615b13565b602090810291909101015250613d2581615afa565b9050613c85565b5090955093505050505b9250929050565b3360009081526020819052604090205460ff16613d6c5760405162461bcd60e51b8152600401610e3c90615b53565b60008115613db757600082613d8386612710615a9b565b613d8d9190615ab2565b60105490915015613da557613da2818561523a565b91505b601d54811115613db557601d8190555b505b601354811115613dd95760405162461bcd60e51b8152600401610e3c90615c2f565b6040805160c081018252868152602080820187815282840186815260608401888152608085018781524260a08701908152601080546000908152600b9097529588902096518755935160018701559151600286015551600385015551600484015551600590920191909155549051600080516020615e7083398151915290613e6690879085908890615c5f565b60405180910390a260108054906000613e7e83615afa565b91905055505050505050565b6000806000806000613e9b86610c35565b90506000613ea887611330565b6001600160a01b03979097166000908152600c6020908152604080832054600d9092529091205490989297965094509092505050565b6001600160a01b0381166000908152600f60209081526040808320805482518185028101850190935280835260609492939192909184015b828210156123e257600084815260209081902060408051608081018252600486029092018054835260018082015484860152600282015492840192909252600301546001600160a01b031660608301529083529092019101613f16565b600f6020528160005260406000208181548110613f8f57600080fd5b6000918252602090912060049091020180546001820154600283015460039093015491945092506001600160a01b031684565b3360009081526020819052604090205460ff16613ff15760405162461bcd60e51b8152600401610e3c90615b53565b600755565b601b5460609083106140465760405162461bcd60e51b8152602060048201526019602482015278537461727420696e646578206f7574206f6620626f756e647360381b6044820152606401610e3c565b60006140528385615ad4565b601b549091508111156140645750601b545b60006140708583615ae7565b6001600160401b0381111561408757614087615b7b565b60405190808252806020026020018201604052801561410357816020015b6140f06040518060c001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b8152602001906001900390816140a55790505b509050845b82811015612fea57601b818154811061412357614123615b13565b60009182526020918290206040805160c0810182526006909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546001600160a01b03908116608083015260059092015490911660a0820152826141918884615ae7565b815181106141a1576141a1615b13565b602002602001018190525080806141b790615afa565b915050614108565b6141c7615196565b336000908152600f60205260409020805461421a5760405162461bcd60e51b81526020600482015260136024820152724e6f207374616b657320617661696c61626c6560681b6044820152606401610e3c565b8161425f5760405162461bcd60e51b8152602060048201526015602482015274139bc81cdd185ad94812511cc81c1c9bdd9a591959605a1b6044820152606401610e3c565b60005b8281101561461057600084848381811061427e5761427e615b13565b9050602002013590506000805b84548110156145dd5760008582815481106142a8576142a8615b13565b906000526020600020906004020190508381600001541480156142cf575060008160010154115b156145ca5780600201544210156143175760405162461bcd60e51b815260206004820152600c60248201526b14dd185ad9481b1bd8dad95960a21b6044820152606401610e3c565b336000908152601e60209081526040808320878452909152902054801561453857306000908152601460209081526040808320848452909152902080541561451b578054306000908152601860205260408120805483929061437a908490615ae7565b9091555050306000818152601460209081526040808320878452825280832083815560018082018590556002820180546001600160a01b03191690556003909101849055938352601a825280832087845290915281205460195490926143df91615ae7565b90508082146144a0576000601982815481106143fd576143fd615b13565b60009182526020918290206040805180820190915260029092020180546001600160a01b0316825260010154918101919091526019805491925082918590811061444957614449615b13565b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001909401939093558351168152601a8252604080822093830151825292909152208290555b60198054806144b1576144b1615cc8565b600082815260208082206002600019949094019384020180546001600160a01b03191681556001018290559190925530808352601a825260408084208985528352808420939093559151878152600080516020615d90833981519152910160405180910390a25050505b50336000908152601e602090815260408083208884529091528120555b60018201805460038401546000928390556001600160a01b0316808352600a60205260408320805492939192849290614572908490615ae7565b9091555061458c90506001600160a01b03821633846151dd565b336001600160a01b0316600080516020615e3083398151915283896040516145b59291906155d7565b60405180910390a260019550505050506145dd565b50806145d581615afa565b91505061428b565b50806145fb5760405162461bcd60e51b8152600401610e3c90615d06565b5050808061460890615afa565b915050614262565b50506112f86151cc565b3360009081526020819052604090205460ff166146495760405162461bcd60e51b8152600401610e3c90615b53565b6113888111156146975760405162461bcd60e51b81526020600482015260196024820152785072656d69756d2063616e6e6f74206578636565642035302560381b6044820152606401610e3c565b601f55565b6060806000806146ab85611330565b6001600160a01b0386166000908152600e6020526040812054601054929350916146d6908390615ae7565b90508060000361470757505060408051600080825260208201818152828401909352909550909350915061486d9050565b806001600160401b0381111561471f5761471f615b7b565b604051908082528060200260200182016040528015614748578160200160208202803683370190505b509550806001600160401b0381111561476357614763615b7b565b60405190808252806020026020018201604052801561478c578160200160208202803683370190505b50945060005b818110156148685760006147a68285615ad4565b9050808883815181106147bb576147bb615b13565b60209081029190910101528415614834576000818152600b6020526040812060040154612710906147ec9088615a9b565b6147f69190615ab2565b90508088848151811061480b5761480b615b13565b60209081029190910101526148208188615ad4565b965061482c8187615ae7565b955050614855565b600087838151811061484857614848615b13565b6020026020010181815250505b508061486081615afa565b915050614792565b505050505b9193909250565b61487c615196565b6001600160a01b0382166000908152601460209081526040808320848452909152902080546148bd5760405162461bcd60e51b8152600401610e3c90615c75565b336001600160a01b0384160361490e5760405162461bcd60e51b815260206004820152601660248201527543616e6e6f7420627579206f776e206c697374696e6760501b6044820152606401610e3c565b805460018201546003830154600082841161492a576000614934565b6149348385615ae7565b905060008461494583612710615a9b565b61494f9190615ab2565b905060006127106149608380615a9b565b61496a9190615ab2565b9050600061271061497b8389615a9b565b6149859190615ab2565b905060006149938289615ae7565b90506149af600080516020615dd0833981519152338d8a6152ba565b336000908152600c602052604081205490036149d957601054336000908152600e60205260409020555b306001600160a01b038c1603614a3757336000908152600c602052604081208054839290614a08908490615ad4565b909155505030600090815260186020526040812080548a9290614a2c908490615ae7565b90915550614ab69050565b6001600160a01b038b166000908152600c6020526040812080548a9290614a5f908490615ae7565b9091555050336000908152600c602052604081208054839290614a83908490615ad4565b90915550506001600160a01b038b16600090815260186020526040812080548a9290614ab0908490615ae7565b90915550505b336000908152600d602052604081208054839290614ad5908490615ad4565b925050819055508160116000828254614aee9190615ae7565b90915550506001600160a01b038b1660009081526017602052604081208054899290614b1b908490615ad4565b92505081905550601b6040518060c001604052808881526020014281526020018a81526020018981526020018d6001600160a01b03168152602001336001600160a01b031681525090806001815401808255809150506001900390600052602060002090600602016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a08201518160050160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050601460008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008b815260200190815260200160002060008082016000905560018201600090556002820160006101000a8154906001600160a01b030219169055600382016000905550506000601a60008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c815260200190815260200160002054905060006001601980549050614cca9190615ae7565b9050808214614d8b57600060198281548110614ce857614ce8615b13565b60009182526020918290206040805180820190915260029092020180546001600160a01b03168252600101549181019190915260198054919250829185908110614d3457614d34615b13565b6000918252602080832084516002939093020180546001600160a01b0319166001600160a01b03938416178155938101516001909401939093558351168152601a8252604080822093830151825292909152208290555b6019805480614d9c57614d9c615cc8565b6001900381819060005260206000209060020201600080820160006101000a8154906001600160a01b030219169055600182016000905550509055601a60008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d815260200190815260200160002060009055336001600160a01b03168d6001600160a01b03167f7bb39d095b04a9986ed34adf14d74c33294d0a9e807f02bf634d532507422eba8b8f604051614e569291906155d7565b60405180910390a350505050505050505050506112f86151cc565b33600090815260146020908152604080832085845290915290208054614ea95760405162461bcd60e51b8152600401610e3c90615c75565b60028101546001600160a01b03163314614ed55760405162461bcd60e51b8152600401610e3c90615ca0565b60008211614ef55760405162461bcd60e51b8152600401610e3c90615baa565b600181018290556040513390600080516020615df083398151915290614f1e90859087906155d7565b60405180910390a2505050565b3360009081526001602052604090205460ff16614f5a5760405162461bcd60e51b8152600401610e3c90615b53565b6001600160a01b038516614fa75760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642075736572206164647265737360601b6044820152606401610e3c565b60008411614fc75760405162461bcd60e51b8152600401610e3c90615cde565b6001600160a01b0382166150155760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401610e3c565b6008805490600061502583615afa565b919050555060008161503957600854615049565b60085461504990620f4240615ad4565b6001600160a01b038781166000908152600f6020908152604080832081516080810183528681528084018c81528184018c81528b881660608401818152855460018082018855968a52888a209551600490910290950194855592519484019490945551600283015551600390910180546001600160a01b0319169190961617909455928252600a9052908120805492935087929091906150ea908490615ad4565b92505081905550856001600160a01b0316600080516020615e30833981519152868360405161273b9291906155d7565b3360009081526020819052604090205460ff166151495760405162461bcd60e51b8152600401610e3c90615b53565b6001600160a01b03811661516f5760405162461bcd60e51b8152600401610e3c90615c06565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b60006151a06152f9565b8054909150600119016151c657604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60006151d66152f9565b6001905550565b61523583846001600160a01b031663a9059cbb85856040516024016152039291906155be565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061531d565b505050565b6000601d54831161524d57506000610e01565b6000601d548461525d9190615ae7565b9050600061271061526e8584615a9b565b6152789190615ab2565b95945050505050565b6000807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610e01565b6152b2615385565b610fcb6153aa565b6040516001600160a01b0384811660248301528381166044830152606482018390526152f39186918216906323b872dd90608401615203565b50505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b600080602060008451602086016000885af180615340576040513d6000823e3d81fd5b50506000513d91508115615358578060011415615365565b6001600160a01b0384163b155b156152f35783604051635274afe760e01b8152600401610e3c9190615471565b61538d6153b2565b610fcb57604051631afcd79f60e31b815260040160405180910390fd5b6151cc615385565b60006153bc615281565b54600160401b900460ff16919050565b6040518060800160405280600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356001600160a01b038116811461544a57600080fd5b919050565b60006020828403121561546157600080fd5b61546a82615433565b9392505050565b6001600160a01b0391909116815260200190565b6000806040838503121561549857600080fd5b6154a183615433565b946020939093013593505050565b60008083601f8401126154c157600080fd5b5081356001600160401b038111156154d857600080fd5b6020830191508360208260051b8501011115613d3657600080fd5b6000806020838503121561550657600080fd5b82356001600160401b0381111561551c57600080fd5b615528858286016154af565b90969095509350505050565b60006020828403121561554657600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561557d57815187529582019590820190600101615561565b509495945050505050565b60608152600061559b606083018661554d565b82810360208401526155ad818661554d565b915050826040830152949350505050565b6001600160a01b03929092168252602082015260400190565b918252602082015260400190565b600080604083850312156155f857600080fd5b50508035926020909101359150565b80518252602080820151908301526040808201516001600160a01b031690830152606090810151910152565b60608082528451908201819052600090608090818401906020808901855b838110156156765781516001600160a01b031685529382019390820190600101615651565b505085830381870152615689838961554d565b868103604088015287518082528289019450908201925060005b818110156156c6576156b6848651615607565b93820193928501926001016156a3565b50919998505050505050505050565b6000806000806000806000806000806101408b8d0312156156f557600080fd5b6156fe8b615433565b995060208b0135985060408b0135975060608b0135965061572160808c01615433565b999c989b50969995989760a0870135975060c08701359660e08101359650610100810135955061012001359350915050565b6000806040838503121561576657600080fd5b61576f83615433565b915061577d60208401615433565b90509250929050565b602080825282518282018190526000919060409081850190868401855b828110156158275781518051855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0808201519086015260e0808201516001600160a01b03169086015261010080820151151590860152610120908101519085015261014090930192908501906001016157a3565b5091979650505050505050565b6000806000806080858703121561584a57600080fd5b5050823594602084013594506040840135936060013592509050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301525050565b6020808252825182820181905260009190848201906040850190845b818110156158e2576158cf838551615866565b9284019260c092909201916001016158bc565b50909695505050505050565b60808101610e018284615607565b8051825260208082015190830152604080820151908301526060908101516001600160a01b0316910152565b60808101610e0182846158fc565b60c08101610e018284615866565b604081526000615957604083018561554d565b8281036020840152615278818561554d565b6020808252825182820181905260009190848201906040850190845b818110156158e2576159988385516158fc565b9284019260809290920191600101615985565b602080825282518282018190526000919060409081850190868401855b828110156158275781518051855286810151878601528581015186860152606080820151908601526080808201516001600160a01b039081169187019190915260a091820151169085015260c090930192908501906001016159c8565b600080600080600060a08688031215615a3d57600080fd5b615a4686615433565b94506020860135935060408601359250615a6260608701615433565b915060808601358015158114615a7757600080fd5b809150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610e0157610e01615a85565b600082615acf57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610e0157610e01615a85565b81810381811115610e0157610e01615a85565b600060018201615b0c57615b0c615a85565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60208082526010908201526f4e6f7468696e6720746f20636c61696d60801b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600060208284031215615ba357600080fd5b5051919050565b602080825260129082015271496e76616c69642073616c6520707269636560701b604082015260600190565b602080825260169082015275496e73756666696369656e74206e6574207374616b6560501b604082015260600190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b6020808252601690820152750aadcd8dec6d640e0cae4c6cadce8c2ceca40d0d2ced60531b604082015260600190565b9283526020830191909152604082015260600190565b602080825260119082015270131a5cdd1a5b99c81b9bdd08199bdd5b99607a1b604082015260600190565b6020808252600e908201526d2737ba103a34329039b2b63632b960911b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b6020808252600e908201526d125b9d985b1a5908185b5bdd5b9d60921b604082015260600190565b6020808252600f908201526e14dd185ad9481b9bdd08199bdd5b99608a1b60408201526060019056feb0775d57c3eeb070f58d410e36e9ff396813a5d76997d9a91bdf10f0798296f0944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9696a65a8b4f7f65a1063243d7f7e9e4da00ff767599acf21549ef2548a45d1695ae73d12dec3eb3b445b6c9feb2fd559ba7c852c525bc1e59d8f7ff760c55df041d4a94c2c356e29a6583071e731bdacf2ca56565ba5efebcff6936eb7923b5172100000000000000000000000055d398326f99059ff775485246999027b31979558e79b7ba8dab5ebfa59b9c6af1743c3ef14863680b3cc5ac837f8d636f76031ca92ff919b850e4909ab2261d907ef955f11bc1716733a6cbece38d163a69af8a933735aa8de6d7547d0126171b2f31b9c34dd00f3ecd4be85a0ba047db4fafef944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695eadbedb993dfca23e4c79bf4fa5fe531c2e0e926258fabb8445e8bc5c472780fa2646970667358221220bb5fd67f72c116610f5fc1a7ff83ac5a9d2a17e514afc9da84216c16e77b9c5864736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/CunaFinanceBsc.sol b/contracts/CunaFinanceBsc.sol index 1d73c3e..0f03f90 100644 --- a/contracts/CunaFinanceBsc.sol +++ b/contracts/CunaFinanceBsc.sol @@ -115,6 +115,8 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable { MarketplaceHistory[] public marketplaceHistory; // Complete history of all transactions mapping(address => uint256) public totalClaimed; // Track total amount claimed and sent to withdrawStakes per user uint256 public highestRatio; // Track the highest TVL/liability ratio ever achieved (scaled by 10000) + mapping(address => mapping(uint256 => uint256)) public contractOwnedSellStakes; // Track contract-owned sellStakes linked to user withdrawStake IDs + uint256 public sellStakePremiumPercent; // Premium percentage for contract-owned sellStakes (e.g., 1000 = 10%) // Events event VestingClaimed(address indexed user, uint256 amount, uint256 bonus); @@ -163,6 +165,7 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable { unlockDelay = 60 * 60 * 72; maxUnlockPercentage = 100; // 1% maximum unlock per epoch + sellStakePremiumPercent = 1000; // 10% premium for contract-owned sellStakes } // Ownership Management @@ -212,40 +215,40 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable { priceOracles[_token] = _oracle; } - /// @notice Set unlock schedule for a token using percentage-based steps - /// @param _token The token address to set the schedule for - /// @param _lockTime The initial lock time in seconds - /// @param _percentagePerStep The percentage to unlock at each step (scaled by 10000) - function setUnlockScheduleByPercentage(address _token, uint256 _lockTime, uint256 _percentagePerStep) external onlyOwner { - require(_token != address(0), "Invalid token address"); - require(_percentagePerStep > 0 && _percentagePerStep <= 10000, "Invalid percentage"); + // /// @notice Set unlock schedule for a token using percentage-based steps + // /// @param _token The token address to set the schedule for + // /// @param _lockTime The initial lock time in seconds + // /// @param _percentagePerStep The percentage to unlock at each step (scaled by 10000) + // function setUnlockScheduleByPercentage(address _token, uint256 _lockTime, uint256 _percentagePerStep) external onlyOwner { + // require(_token != address(0), "Invalid token address"); + // require(_percentagePerStep > 0 && _percentagePerStep <= 10000, "Invalid percentage"); - // Clear existing schedule - delete unlockSchedules[_token]; + // // Clear existing schedule + // delete unlockSchedules[_token]; - uint256 totalPercentage = 0; - uint256 timeOffset = _lockTime; + // uint256 totalPercentage = 0; + // uint256 timeOffset = _lockTime; - // Create unlock steps until we reach 100% - while (totalPercentage < 10000) { - uint256 stepPercentage = _percentagePerStep; + // // Create unlock steps until we reach 100% + // while (totalPercentage < 10000) { + // uint256 stepPercentage = _percentagePerStep; - // Adjust last step to exactly reach 100% - if (totalPercentage + stepPercentage > 10000) { - stepPercentage = 10000 - totalPercentage; - } + // // Adjust last step to exactly reach 100% + // if (totalPercentage + stepPercentage > 10000) { + // stepPercentage = 10000 - totalPercentage; + // } - unlockSchedules[_token].push(UnlockStep({ - timeOffset: timeOffset, - percentage: stepPercentage - })); + // unlockSchedules[_token].push(UnlockStep({ + // timeOffset: timeOffset, + // percentage: stepPercentage + // })); - totalPercentage += stepPercentage; - timeOffset += _lockTime; // Each step adds the same time interval - } + // totalPercentage += stepPercentage; + // timeOffset += _lockTime; // Each step adds the same time interval + // } - emit UnlockScheduleSet(_token); - } + // emit UnlockScheduleSet(_token); + // } // /// @notice Set custom unlock schedule for a token with specific steps // /// @param _token The token address to set the schedule for @@ -297,6 +300,13 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable { instantBuyoutPercent = _newPercent; } + /// @notice Update contract-owned sellStake premium percentage + /// @param _newPremium The premium percentage (scaled by 10000), ex: 1000 = 10% + function updateSellStakePremiumPercent(uint256 _newPremium) external onlyOwner { + require(_newPremium <= 5000, "Premium cannot exceed 50%"); + sellStakePremiumPercent = _newPremium; + } + // Epoch-based Staking Functions /// @notice Internal function to calculate unlock percentage based on ratio improvement vs historical high @@ -440,17 +450,44 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable { WithdrawStake storage stake = userStakes[i]; if (stake.stakeId == stakeId && stake.amount > 0) { require(block.timestamp >= stake.unlockTime, "Stake locked"); - + + // Check if there's a contract-owned sellStake linked to this withdrawStake + uint256 contractSellStakeId = contractOwnedSellStakes[msg.sender][stakeId]; + if (contractSellStakeId > 0) { + SellStake storage contractSellStake = sellStakes[address(this)][contractSellStakeId]; + if (contractSellStake.value > 0) { + uint256 sellValue = contractSellStake.value; + + // Cancel the contract-owned sellStake (no fee) + pendingSellStakes[address(this)] -= sellValue; + delete sellStakes[address(this)][contractSellStakeId]; + + // Remove from keys array using swap-and-pop + uint256 keyIndex = sellStakeKeyIndex[address(this)][contractSellStakeId]; + uint256 lastKeyIndex = sellStakeKeys.length - 1; + if (keyIndex != lastKeyIndex) { + SellStakeKey memory lastKey = sellStakeKeys[lastKeyIndex]; + sellStakeKeys[keyIndex] = lastKey; + sellStakeKeyIndex[lastKey.seller][lastKey.stakeId] = keyIndex; + } + sellStakeKeys.pop(); + delete sellStakeKeyIndex[address(this)][contractSellStakeId]; + + emit StakeSaleCancelled(address(this), contractSellStakeId); + } + delete contractOwnedSellStakes[msg.sender][stakeId]; + } + uint256 amount = stake.amount; address token = stake.token; stake.amount = 0; // Mark as withdrawn - + // Decrement withdraw liabilities for all tokens withdrawLiabilities[token] -= amount; - + // Transfer tokens to user based on the specified token IERC20(token).safeTransfer(msg.sender, amount); - + emit StakeWithdrawn(msg.sender, amount, stakeId); found = true; break; @@ -485,16 +522,40 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable { // Create withdrawable stake with unlock delay (like claimUnlockedFunds) stakeIdCounter++; + uint256 withdrawStakeId = stakeIdCounter; withdrawStakes[msg.sender].push(WithdrawStake({ - stakeId: stakeIdCounter, + stakeId: withdrawStakeId, amount: payoutAmount, unlockTime: block.timestamp + unlockDelay, token: BSC_TOKEN })); - + // Increment withdraw liabilities for BSC_TOKEN withdrawLiabilities[BSC_TOKEN] += payoutAmount; - + + // Create contract-owned sellStake at premium price + uint256 sellStakePrice = (payoutAmount * (10000 + sellStakePremiumPercent)) / 10000; + stakeIdCounter++; + uint256 sellStakeId = stakeIdCounter; + + sellStakes[address(this)][sellStakeId] = SellStake({ + value: amount, // Original amount - what buyer receives in stake + salePrice: sellStakePrice, // Premium price buyer pays + seller: address(this), + listTime: block.timestamp + }); + + pendingSellStakes[address(this)] += amount; + contractOwnedSellStakes[msg.sender][withdrawStakeId] = sellStakeId; // Link withdrawStake ID to sellStake ID + + // Add to iteration keys + sellStakeKeys.push(SellStakeKey({ + seller: address(this), + stakeId: sellStakeId + })); + sellStakeKeyIndex[address(this)][sellStakeId] = sellStakeKeys.length - 1; + + emit StakeUpForSale(address(this), sellStakePrice, sellStakeId); emit FundsClaimed(msg.sender, payoutAmount); } @@ -822,10 +883,17 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable { userLastClaimedEpoch[msg.sender] = currentEpochId; } - // Transfer stakes: remove from seller, add to buyer (minus protocol share) - userBigStake[seller] -= value; - userBigStake[msg.sender] += buyerStake; - pendingSellStakes[seller] -= value; + // Transfer stakes: handle contract seller differently + if (seller == address(this)) { + // Contract is seller - only add to buyer, don't deduct from contract + userBigStake[msg.sender] += buyerStake; + pendingSellStakes[address(this)] -= value; + } else { + // Normal seller flow - remove from seller, add to buyer (minus protocol share) + userBigStake[seller] -= value; + userBigStake[msg.sender] += buyerStake; + pendingSellStakes[seller] -= value; + } // Increment buyer's original stake tracking (marketplace purchases count as original stake) userOriginalStake[msg.sender] += buyerStake; @@ -1383,7 +1451,7 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable { /// @notice Test function for upgrade verification /// @return Returns a constant value to verify upgrade worked function testUpgradeFunction() external pure returns (uint256) { - return 1001; // Different value from bsc_paca to distinguish contracts + return 1003; // Different value from bsc_paca to distinguish contracts } } \ No newline at end of file diff --git a/hardhat.config.js b/hardhat.config.js index 5f57c84..f53f6f1 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -33,42 +33,75 @@ module.exports = { url: "http://127.0.0.1:8545", }, bscTestnet: { - url: "https://virtual.binance.eu.rpc.tenderly.co/77a9a30c-44ca-45e0-ae2a-9b5ddb41d20e", + url: "https://virtual.binance.eu.rpc.tenderly.co/fbd4f88f-4e4c-4894-a197-2272e3b3d197", chainId: 1337, accounts: env.PRIVATE_KEY ? [env.PRIVATE_KEY] : [], }, anvil: { - url: "https://rpc.tacopancake.com", + url: "https://virtual.binance.eu.rpc.tenderly.co/7c672a28-191d-4bb0-9af8-5ae1e4464c5d", chainId: 1337, - accounts: [ - "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", // Default Anvil account 0 + accounts: env.PRIVATE_KEY ? [env.PRIVATE_KEY] : [ + // "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", // Default Anvil account 0 ], + allowUnlimitedContractSize: true, }, buildbear: { - url: "https://rpc.buildbear.io/stale-bucky-0f42044d", + url: "https://rpc.buildbear.io/interim-warlock-36006e5c", chainId: 31337, accounts: env.PRIVATE_KEY ? [env.PRIVATE_KEY] : [], }, + basefork: { + url: "https://rpc.buildbear.io/yodelling-wong-30e77094", + chainId: 31337, + accounts: env.PRIVATE_KEY ? [env.PRIVATE_KEY] : [], + }, + mainnet: { + url: env.MAINNET_RPC_URL || "https://bsc-dataseed1.binance.org", + chainId: 56, + accounts: env.PRIVATE_KEY ? [env.PRIVATE_KEY] : [], + }, + base: { + url: env.BASE_RPC_URL || "https://base-mainnet.public.blastapi.io", + chainId: 8453, + accounts: env.PRIVATE_KEY ? [env.PRIVATE_KEY] : [], + }, + sonic: { + url: env.SONIC_RPC_URL || "https://rpc.soniclabs.com", + chainId: 146, + accounts: env.PRIVATE_KEY ? [env.PRIVATE_KEY] : [], + }, }, etherscan: { - apiKey: { - bsc: env.BSCSCAN_API_KEY || "", - bscTestnet: env.BSCSCAN_API_KEY || "", - buildbear: "abc", // API key not needed for BuildBear - }, + apiKey: "JRKR5T93RQTKVERUJ2NVE4T994TD66QGFH", customChains: [ { network: "buildbear", chainId: 31337, urls: { - apiURL: "https://rpc.buildbear.io/verify/etherscan/stale-bucky-0f42044d", - browserURL: "https://explorer.buildbear.io/stale-bucky-0f42044d" + apiURL: "https://rpc.buildbear.io/verify/etherscan/missing-darkphoenix-ad09c709", + browserURL: "https://explorer.buildbear.io/missing-darkphoenix-ad09c709" + } + }, + { + network: "base", + chainId: 8453, + urls: { + apiURL: "https://api.basescan.org/api", + browserURL: "https://basescan.org" + } + }, + { + network: "sonic", + chainId: 146, + urls: { + apiURL: "https://api.sonicscan.org/api", + browserURL: "https://sonicscan.org" } } ] }, sourcify: { - enabled: true, - apiUrl: "https://rpc.buildbear.io/verify/sourcify/server/stale-bucky-0f42044d" + enabled: false, + apiUrl: "https://rpc.buildbear.io/verify/sourcify/server/missing-darkphoenix-ad09c709" }, }; \ No newline at end of file