0x60a060405234801561001057600080fd5b5061001961002a565b6001600160a01b0316608052610067565b60006040516100389061005a565b604051809103906000f080158015610054573d6000803e3d6000fd5b50905090565b6111be806106d383390190565b60805161064b61008860003960008181605601526101c3015261064b6000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635c60da1b1461005157806393c44847146100a2578063d4277ebc146100eb578063ed547bf7146100fe575b600080fd5b6100787f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100de6040518060400160405280600581526020017f352e372e3100000000000000000000000000000000000000000000000000000081525081565b604051610099919061044c565b6100786100f936600461049d565b610111565b61007861010c36600461049d565b61013b565b6000806000610121868686610190565b9150915061012f8282610200565b925050505b9392505050565b600080600061014b868686610190565b91509150600061015b8383610200565b905073ffffffffffffffffffffffffffffffffffffffff81163b61012f576101856000848461021c565b979650505050505050565b6000606060008585856040516020016101ab93929190610529565b604051602081830303815290604052905060006101e87f000000000000000000000000000000000000000000000000000000000000000083610380565b82516020909301929092209791965090945050505050565b8051602082012060009061021484826103f6565b949350505050565b60008347101561028d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b81516000036102f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610284565b8282516020840186f5905073ffffffffffffffffffffffffffffffffffffffff8116610134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610284565b60607f600b380380600b3d393df3363d3d373d3d3d3d60368038038091363936013d738360601b7f5af43d3d93803e603457fd5bf3000000000000000000000000000000000000008485516040516020016103df959493929190610596565b604051602081830303815290604052905092915050565b60006101348383306000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b60005b8381101561044357818101518382015260200161042b565b50506000910152565b602081526000825180602084015261046b816040850160208701610428565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000604084860312156104b257600080fd5b833567ffffffffffffffff808211156104ca57600080fd5b818601915086601f8301126104de57600080fd5b8135818111156104ed57600080fd5b8760208260051b850101111561050257600080fd5b6020928301955093505084013560ff8116811461051e57600080fd5b809150509250925092565b604080825281018390526000846060830182805b8781101561057e57833573ffffffffffffffffffffffffffffffffffffffff8116808214610569578384fd5b8452506020938401939092019160010161053d565b5050809250505060ff83166020830152949350505050565b8581527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000851660208201527fffffffffffffffffffffffffff0000000000000000000000000000000000000084166034820152600083516105fe816041850160208801610428565b60419201918201929092526061019594505050505056fea2646970667358221220c6619298642c54eb04c594678a1f35040dc01adb1505d0cf82d15a19e6ff449064736f6c63430008130033608060405234801561001057600080fd5b5061119e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80636465e69f116100505780636465e69f146100b357806393c44847146100cd578063f7e83aee1461011657600080fd5b806322a8d6fc1461006c5780632e0ed23414610092575b600080fd5b61007f61007a366004610bb7565b610139565b6040519081526020015b60405180910390f35b6100a56100a0366004610bb7565b61014e565b604051610089929190610bf9565b6100bb600481565b60405160ff9091168152602001610089565b6101096040518060400160405280600581526020017f352e372e3100000000000000000000000000000000000000000000000000000081525081565b6040516100899190610c5d565b610129610124366004610cc9565b610179565b6040519015158152602001610089565b60006101458383610392565b90505b92915050565b6060600061015a610428565b80602001905181019061016d9190610dc9565b915091505b9250929050565b60008061018886868686610458565b9050600080610197868661014e565b9150915060008160ff1611610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4e6f204d756c746973696749534d207468726573686f6c642070726573656e7460448201527f20666f72206d657373616765000000000000000000000000000000000000000060648201526084015b60405180910390fd5b81516000805b8360ff1681101561038157600061028f876102558e8e86610660565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061067a92505050565b90505b83831080156102e657508583815181106102ae576102ae610ed6565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156102fb576102f483610f34565b9250610292565b838310610364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f217468726573686f6c6400000000000000000000000000000000000000000000604482015260640161022a565b61036d83610f34565b9250508061037a90610f34565b9050610239565b5060019a9950505050505050505050565b6000806103a161044884610f6c565b90506103ae604182610fae565b15610415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f496e76616c6964207369676e617475726573206c656e67746800000000000000604482015260640161022a565b610420604182610fc2565b949350505050565b60608060203603803580820391506040519250602081018301604052808352602083018183823750919392505050565b6000610464858561069e565b63ffffffff1661047486866106d4565b63ffffffff1611156104e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f496e76616c6964206d65726b6c6520696e646578206d65746164617461000000604482015260640161022a565b600061054561052685858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106f592505050565b6105308888610700565b61053a89896106d4565b63ffffffff16610736565b905061065661055485856107df565b61055e88886107ef565b836105698a8a61069e565b6105738b8b610818565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e097881b811660208084019190915260248301979097527f48595045524c414e45000000000000000000000000000000000000000000000060448301528251808303602d018152604d83018452805190880120606d830152608d8201959095529290951b90921660ad82015260b1808201929092528351808203909201825260d10190925281519101207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b9695505050505050565b36600061066e858585610829565b91509150935093915050565b6000806000610689858561086f565b91509150610696816108b1565b509392505050565b600082610444836106b0826004610fd6565b61ffff16926106c193929190610ff8565b6106ca91611022565b60e01c9392505050565b6000826020836106e582600461106a565b60ff16926106c193929190610ff8565b805160209091012090565b610708610b56565b8260448361071861040083610fd6565b61ffff169261072993929190610ff8565b8101906101459190611083565b8260005b602081101561069657600183821c16600085836020811061075d5761075d610ed6565b602002015190508160010361079d5760408051602081018390529081018590526060016040516020818303038152906040528051906020012093506107ca565b60408051602081018690529081018290526060016040516020818303038152906040528051906020012093505b505080806107d790610f34565b91505061073a565b60006106c1600960058486610ff8565b60008281836107ff82602061106a565b60ff169261080f93929190610ff8565b61014591611102565b6000826024836107ff82602061106a565b3660008061083860418561113e565b61084490610448611155565b90506000610853604183611155565b90506108618183888a610ff8565b935093505050935093915050565b60008082516041036108a55760208301516040840151606085015160001a61089987828585610a67565b94509450505050610172565b50600090506002610172565b60008160048111156108c5576108c5610ea7565b036108cd5750565b60018160048111156108e1576108e1610ea7565b03610948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161022a565b600281600481111561095c5761095c610ea7565b036109c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161022a565b60038160048111156109d7576109d7610ea7565b03610a64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161022a565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610a9e5750600090506003610b4d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610af2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116610b4657600060019250925050610b4d565b9150600090505b94509492505050565b6040518061040001604052806020906020820280368337509192915050565b60008083601f840112610b8757600080fd5b50813567ffffffffffffffff811115610b9f57600080fd5b60208301915083602082850101111561017257600080fd5b60008060208385031215610bca57600080fd5b823567ffffffffffffffff811115610be157600080fd5b610bed85828601610b75565b90969095509350505050565b604080825283519082018190526000906020906060840190828701845b82811015610c4857815173ffffffffffffffffffffffffffffffffffffffff1684529284019290840190600101610c16565b50505060ff9490941692019190915250919050565b600060208083528351808285015260005b81811015610c8a57858101830151858201604001528201610c6e565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b60008060008060408587031215610cdf57600080fd5b843567ffffffffffffffff80821115610cf757600080fd5b610d0388838901610b75565b90965094506020870135915080821115610d1c57600080fd5b50610d2987828801610b75565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610dab57610dab610d35565b604052919050565b805160ff81168114610dc457600080fd5b919050565b60008060408385031215610ddc57600080fd5b825167ffffffffffffffff80821115610df457600080fd5b818501915085601f830112610e0857600080fd5b8151602082821115610e1c57610e1c610d35565b8160051b9250610e2d818401610d64565b8281529284018101928181019089851115610e4757600080fd5b948201945b84861015610e8b578551935073ffffffffffffffffffffffffffffffffffffffff84168414610e7b5760008081fd5b8382529482019490820190610e4c565b9650610e9a9050878201610db3565b9450505050509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610f6557610f65610f05565b5060010190565b8181038181111561014857610148610f05565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610fbd57610fbd610f7f565b500690565b600082610fd157610fd1610f7f565b500490565b61ffff818116838216019080821115610ff157610ff1610f05565b5092915050565b6000808585111561100857600080fd5b8386111561101557600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156110625780818660040360031b1b83161692505b505092915050565b60ff818116838216019081111561014857610148610f05565b600061040080838503121561109757600080fd5b83601f8401126110a657600080fd5b60405181810181811067ffffffffffffffff821117156110c8576110c8610d35565b6040529083019080858311156110dd57600080fd5b845b838110156110f75780358252602091820191016110df565b509095945050505050565b80356020831015610148577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b808202811582820484141761014857610148610f05565b8082018082111561014857610148610f0556fea2646970667358221220c83b4223ce82c53f861c29c7f76c7c0e50328f3227204117e8a10c281957178464736f6c63430008130033