0x60a060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260805234801561002857600080fd5b5061003233610037565b610087565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b608051612d13620000aa60003960008181610a790152610aef0152612d136000f3fe6080604052600436106100955760003560e01c8063a88d5e8611610059578063a88d5e8614610163578063ea72b54914610183578063f04f2707146101a3578063f2fde38b146101c3578063fa461e33146101e357600080fd5b80630c80ac4d146100a15780633a4558d7146100d7578063715018a6146101045780637b09d0031461011b5780638da5cb5b1461013b57600080fd5b3661009c57005b600080fd5b3480156100ad57600080fd5b506100c16100bc366004611f80565b610203565b6040516100ce9190611fc1565b60405180910390f35b3480156100e357600080fd5b506100f76100f23660046121e4565b6102ca565b6040516100ce919061225b565b34801561011057600080fd5b50610119610423565b005b34801561012757600080fd5b506100c161013636600461226e565b610437565b34801561014757600080fd5b506000546040516001600160a01b0390911681526020016100ce565b34801561016f57600080fd5b506100f761017e3660046122e2565b6104e4565b34801561018f57600080fd5b5061011961019e3660046122fa565b610721565b3480156101af57600080fd5b506101196101be366004612481565b61086b565b3480156101cf57600080fd5b506101196101de36600461258b565b610cd9565b3480156101ef57600080fd5b506101196101fe3660046125a8565b610d52565b60606000826001600160401b0381111561021f5761021f61204b565b60405190808252806020026020018201604052801561025257816020015b606081526020019060019003908161023d5790505b50905060005b838110156102c05761029085858381811061027557610275612627565b9050602002810190610287919061263d565b6100f29061265d565b8282815181106102a2576102a2612627565b602002602001018190525080806102b89061267f565b915050610258565b5090505b92915050565b6060818101518251516000906001600160401b038111156102ed576102ed61204b565b604051908082528060200260200182016040528015610316578160200160208202803683370190505b50905060005b84515181101561041b5760006001600160a01b03168560200151828151811061034757610347612627565b60200260200101516001600160a01b031603610395576103898560000151828151811061037657610376612627565b6020026020010151848760400151610de6565b604087015292506103e7565b6103df856000015182815181106103ae576103ae612627565b6020026020010151866020015183815181106103cc576103cc612627565b6020026020010151858860400151611058565b604087015292505b84604001518282815181106103fe576103fe612627565b6020908102919091010152806104138161267f565b91505061031c565b509392505050565b61042b61133c565b6104356000611396565b565b60606000826001600160401b038111156104535761045361204b565b60405190808252806020026020018201604052801561048657816020015b60608152602001906001900390816104715790505b50905060005b838110156102c0576104b48585838181106104a9576104a9612627565b9050606002016104e4565b8282815181106104c6576104c6612627565b602002602001018190525080806104dc9061267f565b91505061048c565b60408051600280825260608083018452926000929190602083019080368337019050509050610516602084018461258b565b6001600160a01b03166370a08231610534606086016040870161258b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa925050508015610594575060408051601f3d908101601f1916820190925261059191810190612698565b60015b6105ef573d8080156105c2576040519150601f19603f3d011682016040523d82523d6000602084013e6105c7565b606091505b506000826000815181106105dd576105dd612627565b60200260200101818152505050610611565b808260008151811061060357610603612627565b602002602001018181525050505b610621604084016020850161258b565b6001600160a01b03166370a0823161063f606086016040870161258b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa92505050801561069f575060408051601f3d908101601f1916820190925261069c91810190612698565b60015b6106fa573d8080156106cd576040519150601f19603f3d011682016040523d82523d6000602084013e6106d2565b606091505b506000826001815181106106e8576106e8612627565b602002602001018181525050506102c4565b808260018151811061070e5761070e612627565b6020026020010181815250505092915050565b61072961133c565b6000308888888888888860405160200161074a9897969594939291906126e3565b60408051601f1981840301815260018084528383019092529250600091906020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508b826000815181106107af576107af612627565b60200260200101906001600160a01b031690816001600160a01b0316815250508a816000815181106107e3576107e3612627565b6020908102919091010152604051632e1c224f60e11b815273ba12222222228d8ba445958a75a0704d566bf2c890635c38449e9061082b9030908690869089906004016127c4565b600060405180830381600087803b15801561084557600080fd5b505af1158015610859573d6000803e3d6000fd5b50505050505050505050505050505050565b3373ba12222222228d8ba445958a75a0704d566bf2c8146108cc5760405162461bcd60e51b815260206004820152601660248201527518d85b1b195c881cda1bdd5b19081899481d985d5b1d60521b60448201526064015b60405180910390fd5b6000806000806000858060200190518101906108e89190612898565b94509450945094509450306001600160a01b0316856001600160a01b0316146109535760405162461bcd60e51b815260206004820152601e60248201527f616464726573732073686f756c6420626520626f7420636f6e7472616374000060448201526064016108c3565b60008760008151811061096857610968612627565b60200260200101518960008151811061098357610983612627565b6020026020010151610995919061299f565b905060006109da86868d6000815181106109b1576109b1612627565b60200260200101518d6000815181106109cc576109cc612627565b6020026020010151886113e6565b9050818111610a1c5760405162461bcd60e51b815260206004820152600e60248201526d6e6f742070726f66697461626c6560901b60448201526064016108c3565b610a6873ba12222222228d8ba445958a75a0704d566bf2c8838d600081518110610a4857610a48612627565b60200260200101516001600160a01b03166114a39092919063ffffffff16565b6000610a7482846114fa565b9150507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168c600081518110610ab457610ab4612627565b60200260200101516001600160a01b031603610c02576000610ad682866114fa565b604051632e1a7d4d60e01b8152600481018590529092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169150632e1a7d4d90602401600060405180830381600087803b158015610b3c57600080fd5b505af1158015610b50573d6000803e3d6000fd5b505050506000610b686000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610bb2576040519150601f19603f3d011682016040523d82523d6000602084013e610bb7565b606091505b5050905080610bfb5760405162461bcd60e51b815260206004820152601060248201526f0c6c2dc40dcdee840e6cadcc840cae8d60831b60448201526064016108c3565b5050610c2b565b610c2b610c176000546001600160a01b031690565b828e600081518110610a4857610a48612627565b8315610ccb57604051600090419086908381818185875af1925050503d8060008114610c73576040519150601f19603f3d011682016040523d82523d6000602084013e610c78565b606091505b5050905080610cc95760405162461bcd60e51b815260206004820152601960248201527f63616e206e6f742073656e642065746820746f206d696e65720000000000000060448201526064016108c3565b505b505050505050505050505050565b610ce161133c565b6001600160a01b038116610d465760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108c3565b610d4f81611396565b50565b600080610d61838501856129b2565b9092509050336001600160a01b03831614610db65760405162461bcd60e51b815260206004820152601560248201527418d85b1b195c881cda1bdd5b19081899481c1bdbdb605a1b60448201526064016108c3565b6000808713610dc55785610dc7565b865b9050610ddd6001600160a01b03831684836114a3565b50505050505050565b6000806000859050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e539190612a1b565b50915091506000806000856001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebf9190612a5e565b6001600160a01b03168a6001600160a01b031614610f4057856001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f399190612a5e565b8486610fa5565b856001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa29190612a5e565b85855b91945092509050881580610fc057506001600160701b038216155b80610fd257506001600160701b038116155b15610fe95782600097509750505050505050611050565b6000610ff78a6103e5612a7b565b9050600061100e6001600160701b03841683612a7b565b905060008261101f866103e8612a92565b6001600160701b0316611032919061299f565b905060006110408284612abd565b969b509599505050505050505050505b935093915050565b60008060008690506000856001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ce9190612a5e565b6001600160a01b03161461114357816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113e9190612a5e565b6111a5565b816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a59190612a5e565b9050600087905060006040518060a00160405280896001600160a01b03168152602001846001600160a01b03168152602001888152602001856001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f9190612adf565b62ffffff90811682526000602092830181905260408051636352813560e11b815285516001600160a01b0390811660048301529486015185166024820152908501516044820152606085015190921660648301526080840151831660848301529293509084169063c6a5026a9060a4016080604051808303816000875af19250505080156112ea575060408051601f3d908101601f191682019092526112e791810190612b04565b60015b611324573d808015611318576040519150601f19603f3d011682016040523d82523d6000602084013e61131d565b606091505b505061132b565b5091925050505b929a92995091975050505050505050565b6000546001600160a01b031633146104355760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600083815b875181101561149757600087828151811061140857611408612627565b60200260200101510361145c5761145388828151811061142a5761142a612627565b6020026020010151838787858151811061144657611446612627565b6020026020010151611520565b95509150611485565b61148088828151811061147157611471612627565b6020026020010151838761187c565b955091505b8061148f8161267f565b9150506113eb565b50929695505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526114f5908490611b36565b505050565b6000808383111561151057506000905080611519565b50600190508183035b9250929050565b60008060008690506000866001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611572573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115969190612a5e565b6001600160a01b03161461160b57816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116069190612a5e565b61166d565b816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166d9190612a5e565b90506000816001600160a01b0316836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116dd9190612a5e565b6001600160a01b0316146116f25760006116f4565b855b90506000826001600160a01b0316846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611740573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117649190612a5e565b6001600160a01b03161461177957600061177b565b865b90506117916001600160a01b038a168b8a6114a3565b6040805160208101825260008152905163022c0d9f60e01b81526001600160a01b0386169163022c0d9f916117ce91869186913091600401612b4a565b600060405180830381600087803b1580156117e857600080fd5b505af19250505080156117f9575060015b61186c573d808015611827576040519150601f19603f3d011682016040523d82523d6000602084013e61182c565b606091505b506118368b611c08565b6040516020016118469190612b81565b60408051601f198184030181529082905262461bcd60e51b82526108c391600401612bbd565b5090989497509395505050505050565b60008060008590506000856001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f29190612a5e565b6001600160a01b03161461190757600061190a565b60015b9050600087876040516020016119369291906001600160a01b0392831681529116602082015260400190565b60405160208183030381529060405290506000826119725761196d600173fffd8963efd1fc6a506488495d951d5263988d26612bd0565b611982565b6119826401000276a36001612bf7565b604051630251596160e31b815290915060009081906001600160a01b0387169063128acb08906119be90309089908e9089908b90600401612c17565b60408051808303816000875af19250505080156119f8575060408051601f3d908101601f191682019092526119f591810190612c52565b60015b611a35573d808015611a26576040519150601f19603f3d011682016040523d82523d6000602084013e611a2b565b606091505b506118368c611c08565b9092509050600085611aa857866001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa39190612a5e565b611b0a565b866001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a9190612a5e565b90508086611b185783611b1a565b825b611b2390612c76565b9850985050505050505050935093915050565b6000611b8b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611c1e9092919063ffffffff16565b8051909150156114f55780806020019051810190611ba99190612c92565b6114f55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108c3565b60606102c46001600160a01b0383166014611c37565b6060611c2d8484600085611dd2565b90505b9392505050565b60606000611c46836002612a7b565b611c5190600261299f565b6001600160401b03811115611c6857611c6861204b565b6040519080825280601f01601f191660200182016040528015611c92576020820181803683370190505b509050600360fc1b81600081518110611cad57611cad612627565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611cdc57611cdc612627565b60200101906001600160f81b031916908160001a9053506000611d00846002612a7b565b611d0b90600161299f565b90505b6001811115611d83576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611d3f57611d3f612627565b1a60f81b828281518110611d5557611d55612627565b60200101906001600160f81b031916908160001a90535060049490941c93611d7c81612cb4565b9050611d0e565b508315611c305760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108c3565b606082471015611e335760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108c3565b6001600160a01b0385163b611e8a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c3565b600080866001600160a01b03168587604051611ea69190612ccb565b60006040518083038185875af1925050503d8060008114611ee3576040519150601f19603f3d011682016040523d82523d6000602084013e611ee8565b606091505b5091509150611ef8828286611f03565b979650505050505050565b60608315611f12575081611c30565b825115611f225782518084602001fd5b8160405162461bcd60e51b81526004016108c39190612bbd565b60008083601f840112611f4e57600080fd5b5081356001600160401b03811115611f6557600080fd5b6020830191508360208260051b850101111561151957600080fd5b60008060208385031215611f9357600080fd5b82356001600160401b03811115611fa957600080fd5b611fb585828601611f3c565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b87010192508387016000805b8381101561203d57888603603f19018552825180518088529088019088880190845b818110156120275783518352928a0192918a019160010161200b565b5090975050509386019391860191600101611fe9565b509398975050505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156120895761208961204b565b604052919050565b60006001600160401b038211156120aa576120aa61204b565b5060051b60200190565b6001600160a01b0381168114610d4f57600080fd5b600082601f8301126120da57600080fd5b813560206120ef6120ea83612091565b612061565b82815260059290921b8401810191818101908684111561210e57600080fd5b8286015b84811015612132578035612125816120b4565b8352918301918301612112565b509695505050505050565b60006080828403121561214f57600080fd5b604051608081016001600160401b0382821081831117156121725761217261204b565b81604052829350843591508082111561218a57600080fd5b612196868387016120c9565b835260208501359150808211156121ac57600080fd5b506121b9858286016120c9565b6020830152506040830135604082015260608301356121d7816120b4565b6060919091015292915050565b6000602082840312156121f657600080fd5b81356001600160401b0381111561220c57600080fd5b6122188482850161213d565b949350505050565b600081518084526020808501945080840160005b8381101561225057815187529582019590820190600101612234565b509495945050505050565b602081526000611c306020830184612220565b6000806020838503121561228157600080fd5b82356001600160401b038082111561229857600080fd5b818501915085601f8301126122ac57600080fd5b8135818111156122bb57600080fd5b8660206060830285010111156122d057600080fd5b60209290920196919550909350505050565b6000606082840312156122f457600080fd5b50919050565b600080600080600080600080600060c08a8c03121561231857600080fd5b8935612323816120b4565b985060208a0135975060408a01356001600160401b038082111561234657600080fd5b6123528d838e01611f3c565b909950975060608c013591508082111561236b57600080fd5b6123778d838e01611f3c565b909750955060808c013591508082111561239057600080fd5b5061239d8c828d01611f3c565b9a9d999c50979a9699959894979660a00135949350505050565b600082601f8301126123c857600080fd5b813560206123d86120ea83612091565b82815260059290921b840181019181810190868411156123f757600080fd5b8286015b8481101561213257803583529183019183016123fb565b600082601f83011261242357600080fd5b81356001600160401b0381111561243c5761243c61204b565b61244f601f8201601f1916602001612061565b81815284602083860101111561246457600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561249757600080fd5b84356001600160401b03808211156124ae57600080fd5b818701915087601f8301126124c257600080fd5b813560206124d26120ea83612091565b82815260059290921b8401810191818101908b8411156124f157600080fd5b948201945b83861015612518578535612509816120b4565b825294820194908201906124f6565b9850508801359250508082111561252e57600080fd5b61253a888389016123b7565b9450604087013591508082111561255057600080fd5b61255c888389016123b7565b9350606087013591508082111561257257600080fd5b5061257f87828801612412565b91505092959194509250565b60006020828403121561259d57600080fd5b8135611c30816120b4565b600080600080606085870312156125be57600080fd5b843593506020850135925060408501356001600160401b03808211156125e357600080fd5b818701915087601f8301126125f757600080fd5b81358181111561260657600080fd5b88602082850101111561261857600080fd5b95989497505060200194505050565b634e487b7160e01b600052603260045260246000fd5b60008235607e1983360301811261265357600080fd5b9190910192915050565b60006102c4368361213d565b634e487b7160e01b600052601160045260246000fd5b60006001820161269157612691612669565b5060010190565b6000602082840312156126aa57600080fd5b5051919050565b81835260006001600160fb1b038311156126ca57600080fd5b8260051b80836020870137939093016020019392505050565b6001600160a01b03898116825260a060208084018290529083018990526000918a9160c08501845b8c81101561273257843561271e816120b4565b84168252938201939082019060010161270b565b508581036040870152612746818b8d6126b1565b9350505050828103606084015261275e8186886126b1565b9150508260808301529998505050505050505050565b60005b8381101561278f578181015183820152602001612777565b50506000910152565b600081518084526127b0816020860160208601612774565b601f01601f19169290920160200192915050565b6001600160a01b0385811682526080602080840182905286519184018290526000928782019290919060a0860190855b818110156128125785518516835294830194918301916001016127f4565b505085810360408701526128268189612220565b93505050508281036060840152611ef88185612798565b600082601f83011261284e57600080fd5b8151602061285e6120ea83612091565b82815260059290921b8401810191818101908684111561287d57600080fd5b8286015b848110156121325780518352918301918301612881565b600080600080600060a086880312156128b057600080fd5b85516128bb816120b4565b809550506020808701516001600160401b03808211156128da57600080fd5b818901915089601f8301126128ee57600080fd5b81516128fc6120ea82612091565b81815260059190911b8301840190848101908c83111561291b57600080fd5b938501935b82851015612942578451612933816120b4565b82529385019390850190612920565b60408c0151909950945050508083111561295b57600080fd5b6129678a848b0161283d565b9550606089015192508083111561297d57600080fd5b505061298b8882890161283d565b925050608086015190509295509295909350565b808201808211156102c4576102c4612669565b600080604083850312156129c557600080fd5b82356129d0816120b4565b915060208301356129e0816120b4565b809150509250929050565b80516001600160701b0381168114612a0257600080fd5b919050565b805163ffffffff81168114612a0257600080fd5b600080600060608486031215612a3057600080fd5b612a39846129eb565b9250612a47602085016129eb565b9150612a5560408501612a07565b90509250925092565b600060208284031215612a7057600080fd5b8151611c30816120b4565b80820281158282048414176102c4576102c4612669565b6001600160701b03818116838216028082169190828114612ab557612ab5612669565b505092915050565b600082612ada57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612af157600080fd5b815162ffffff81168114611c3057600080fd5b60008060008060808587031215612b1a57600080fd5b845193506020850151612b2c816120b4565b9250612b3a60408601612a07565b6060959095015193969295505050565b84815283602082015260018060a01b0383166040820152608060608201526000612b776080830184612798565b9695505050505050565b73022bc32b1baba34b7b7103932bb32b93a32b21d160651b815260008251612bb0816014850160208701612774565b9190910160140192915050565b602081526000611c306020830184612798565b6001600160a01b03828116828216039080821115612bf057612bf0612669565b5092915050565b6001600160a01b03818116838216019080821115612bf057612bf0612669565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a060808201819052600090611ef890830184612798565b60008060408385031215612c6557600080fd5b505080516020909101519092909150565b6000600160ff1b8201612c8b57612c8b612669565b5060000390565b600060208284031215612ca457600080fd5b81518015158114611c3057600080fd5b600081612cc357612cc3612669565b506000190190565b6000825161265381846020870161277456fea264697066735822122023ef16c0cc7916a06a4526442700e06d172c9e1622b31e83e50ea6bb2c5c97da64736f6c63430008150033