0x608060405234801561001057600080fd5b50610ca5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806355134f561461003b578063abd97e1314610065575b600080fd5b61004e61004936600461079a565b610085565b60405161005c929190610a95565b60405180910390f35b61007861007336600461079a565b61049f565b60405161005c9190610b37565b606080808367ffffffffffffffff811180156100a057600080fd5b506040519080825280602002602001820160405280156100da57816020015b6100c7610639565b8152602001906001900390816100bf5790505b50905060608467ffffffffffffffff811180156100f657600080fd5b5060405190808252806020026020018201604052801561012a57816020015b60608152602001906001900390816101155790505b50905060005b85811015610491576000606088888481811061014857fe5b905060200281019061015a9190610bad565b81019061016791906106f0565b91509150816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156101a457600080fd5b505afa1580156101b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101dc9190610914565b505089516001600160a01b039095169460029490940b938a93508892508210905061020357fe5b602002602001015160006003811061021757fe5b6020020187868151811061022757fe5b602002602001015160026003811061023b57fe5b6020020182815250828152505050816001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b15801561028257600080fd5b505afa158015610296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ba9190610851565b6001600160801b03168584815181106102cf57fe5b60200260200101516001600381106102e357fe5b6020020152805160609067ffffffffffffffff8111801561030357600080fd5b5060405190808252806020026020018201604052801561033d57816020015b61032a610657565b8152602001906001900390816103225790505b50905060005b825181101561044e57836001600160a01b031663f30dba9384838151811061036757fe5b60200260200101516040518263ffffffff1660e01b815260040161038b9190610b9f565b6101006040518083038186803b1580156103a457600080fd5b505afa1580156103b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103dc919061086c565b505087516001600160801b0390961695600f9590950b9488945087935083109150610405905057fe5b602002602001015160006002811061041957fe5b6020020184848151811061042957fe5b602002602001015160016002811061043d57fe5b602002019190915252600101610343565b50806040516020016104609190610a2e565b60405160208183030381529060405285858151811061047b57fe5b6020908102919091010152505050600101610130565b5090925090505b9250929050565b6060808267ffffffffffffffff811180156104b957600080fd5b506040519080825280602002602001820160405280156104f357816020015b6104e0610639565b8152602001906001900390816104d85790505b50905060005b8381101561062f5784848281811061050d57fe5b905060200201602081019061052291906107da565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561055a57600080fd5b505afa15801561056e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059291906107fd565b826001600160701b03169250816001600160701b031691508063ffffffff1690508484815181106105bf57fe5b60200260200101516000600381106105d357fe5b602002018585815181106105e357fe5b60200260200101516001600381106105f757fe5b6020020186868151811061060757fe5b602002602001015160026003811061061b57fe5b6020020192909252919052526001016104f9565b5090505b92915050565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b60008083601f840112610686578182fd5b50813567ffffffffffffffff81111561069d578182fd5b602083019150836020808302850101111561049857600080fd5b8051801515811461063357600080fd5b80516001600160801b038116811461063357600080fd5b805161ffff8116811461063357600080fd5b60008060408385031215610702578182fd5b823561070d81610c42565b915060208381013567ffffffffffffffff811115610729578283fd5b8401601f81018613610739578283fd5b803561074c61074782610c19565b610bf2565b81815283810190838501858402850186018a1015610768578687fd5b8694505b8385101561078a57803583526001949094019391850191850161076c565b5080955050505050509250929050565b600080602083850312156107ac578182fd5b823567ffffffffffffffff8111156107c2578283fd5b6107ce85828601610675565b90969095509350505050565b6000602082840312156107eb578081fd5b81356107f681610c42565b9392505050565b600080600060608486031215610811578081fd5b835161081c81610c5a565b602085015190935061082d81610c5a565b604085015190925063ffffffff81168114610846578182fd5b809150509250925092565b600060208284031215610862578081fd5b6107f683836106c7565b600080600080600080600080610100898b031215610888578384fd5b6108928a8a6106c7565b9750602089015180600f0b81146108a7578485fd5b80975050604089015195506060890151945060808901518060060b81146108cc578485fd5b60a08a01519094506108dd81610c42565b60c08a015190935063ffffffff811681146108f6578283fd5b91506109058a60e08b016106b7565b90509295985092959890939650565b600080600080600080600060e0888a03121561092e578283fd5b875161093981610c42565b8097505060208801518060020b8114610950578384fd5b955061095f8960408a016106de565b945061096e8960608a016106de565b935061097d8960808a016106de565b925060a088015160ff81168114610992578283fd5b91506109a18960c08a016106b7565b905092959891949750929550565b60008282825b60038110156109d45781518352602092830192909101906001016109b5565b50505060608301905092915050565b60008151808452815b81811015610a08576020818501810151868301820152016109ec565b81811115610a195782602083870101525b50601f01601f19169290920160200192915050565b602080825282518282018190526000919060409081850190868401855b82811015610a8857815184885b6002811015610a7557825182529188019190880190600101610a58565b5050509284019290850190600101610a4b565b5091979650505050505050565b60006040820160408352808551610aac8184610c39565b915060209250828701845b82811015610ad857610aca8483516109af565b935090840190600101610ab7565b50505083810382850152808551610aef8184610c39565b91508192508381028201848801865b83811015610b28578583038552610b168383516109e3565b94870194925090860190600101610afe565b50909998505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610b9357835183875b6003811015610b7d57825182529187019190870190600101610b60565b5050509284019260609290920191600101610b53565b50909695505050505050565b60029190910b815260200190565b6000808335601e19843603018112610bc3578283fd5b83018035915067ffffffffffffffff821115610bdd578283fd5b60200191503681900382131561049857600080fd5b60405181810167ffffffffffffffff81118282101715610c1157600080fd5b604052919050565b600067ffffffffffffffff821115610c2f578081fd5b5060209081020190565b90815260200190565b6001600160a01b0381168114610c5757600080fd5b50565b6001600160701b0381168114610c5757600080fdfea2646970667358221220c27a383c4660cdb45db439490facdcf506779b10586b3381a41cf4664885c37964736f6c634300060c0033