0x608060405234801561001057600080fd5b506114a7806100206000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80635b05fe53116100ad578063a694fc3a11610071578063a694fc3a14610241578063b06910fd14610254578063c4f390dc14610267578063d0c838061461026f578063d6528776146102775761012c565b80635b05fe53146101f5578063640415bf14610216578063688d3c431461021e57806380cb24d014610231578063817b1cd2146102395761012c565b80632e17de78116100f45780632e17de78146101a15780633daf1663146101b457806345f7f249146101c75780634b341aed146101cf57806355eb2e96146101e25761012c565b8063025313a214610131578063158ef93e1461014f5780631c09183e1461016457806323743e6914610179578063292f75c81461018e575b600080fd5b61013961028a565b6040516101469190611254565b60405180910390f35b6101576102a9565b60405161014691906112dc565b610177610172366004610e59565b6102b2565b005b610181610323565b604051610146919061136a565b61017761019c366004610f07565b610329565b6101776101af366004610f8e565b61042d565b6101816101c2366004610e33565b610597565b6101816105a9565b6101816101dd366004610e33565b6105af565b6101776101f0366004610ea6565b6105c1565b610208610203366004610f8e565b61071a565b6040516101469291906112ea565b6101396107d6565b61018161022c366004610e33565b6107e5565b6101776107f7565b610181610a8e565b61017761024f366004610f8e565b610a94565b610181610262366004610e33565b610bcd565b610139610bdf565b610181610bee565b610177610285366004610f8e565b610bf4565b60008060405161029990611243565b6040519081900390205492915050565b60075460ff1681565b60075460ff16156102e157604051600160e51b62461bcd0281526004016102d89061134a565b60405180910390fd5b600080546001600160a01b039485166001600160a01b031991821617909155600180549390941692169190911782556007805460ff1916909217909155600855565b600a5481565b61033161028a565b6001600160a01b0316336001600160a01b03161461034e57600080fd5b60005b825181101561042857610362610c1e565b82828151811061036e57fe5b6020026020010151816000018190525083828151811061038a57fe5b6020908102919091018101516001600160a01b031682820152600280546001810180835560008390528451805191948694939093027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01926103f192849290910190610c36565b5060209190910151600191820180546001600160a01b0319166001600160a01b039092169190911790559290920191506103519050565b505050565b3360009081526005602052604090205481111561045f57604051600160e51b62461bcd0281526004016102d89061131a565b600054604051600160e01b63a9059cbb0281526001600160a01b0390911690819063a9059cbb9061049690309086906004016112b3565b602060405180830381600087803b1580156104b057600080fd5b505af11580156104c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104e89190810190610f70565b61050757604051600160e51b62461bcd0281526004016102d89061132a565b60038054839003905533600090815260056020526040902080548390039081905561054757336000908152600b6020526040812055600c80546000190190555b33600081815260056020526040908190205490517f7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74e9261058b92909186919061128a565b60405180910390a15050565b60066020526000908152604090205481565b60045481565b60056020526000908152604090205481565b60085481146105cf57600080fd5b6001600160a01b03831660009081526005602052604090205461060757604051600160e51b62461bcd0281526004016102d89061135a565b600154604051600160e01b6323b872dd0281526001600160a01b039091169081906323b872dd90610640908890889088906004016112a5565b602060405180830381600087803b15801561065a57600080fd5b505af115801561066e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106929190810190610f70565b6106b157604051600160e51b62461bcd0281526004016102d89061130a565b6001600160a01b03841660009081526009602052604090819020805485018155600a8054860190555490517f469eb22fb630ba4f8a467dcc4038c58a6b781d39fe1de44ed7859a4a49b695149161070b91879187916112ce565b60405180910390a15050505050565b6002818154811061072757fe5b60009182526020918290206002918202018054604080516001831615610100026000190190921693909304601f8101859004850282018501909352828152909350918391908301828280156107bd5780601f10610792576101008083540402835291602001916107bd565b820191906000526020600020905b8154815290600101906020018083116107a057829003601f168201915b505050600190930154919250506001600160a01b031682565b6000546001600160a01b031681565b600b6020526000908152604090205481565b6107ff61028a565b6001600160a01b0316336001600160a01b03161461081c57600080fd5b600154604051600160e01b6370a082310281526001600160a01b039091169060009082906370a0823190610854903090600401611254565b60206040518083038186803b15801561086c57600080fd5b505afa158015610880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108a49190810190610fac565b116108ae57600080fd5b600254604051600160e01b6370a08231028152600091908290819083906001600160a01b038716906370a08231906108ea903090600401611254565b60206040518083038186803b15801561090257600080fd5b505afa158015610916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061093a9190810190610fac565b8161094157fe5b049150600093505b82841015610a87576002848154811061095e57fe5b6000918252602090912060016002909202010154604051600160e01b63a9059cbb0281526001600160a01b0391821692509086169063a9059cbb906109a990849086906004016112b3565b602060405180830381600087803b1580156109c357600080fd5b505af11580156109d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109fb9190810190610f70565b610a1a57604051600160e51b62461bcd0281526004016102d89061133a565b6001600160a01b0381166000908152600660205260409081902080548401815560048054850190555490517f9af9811abc6f1b9cf2234f8ed76daa9a577d4ffbbe0af66ec4b748cde6f4c39f91610a7491849186916112ce565b60405180910390a1600190930192610949565b5050505050565b60035481565b600054604051600160e01b6323b872dd0281526001600160a01b039091169081906323b872dd90610acd90339030908790600401611262565b602060405180830381600087803b158015610ae757600080fd5b505af1158015610afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b1f9190810190610f70565b610b3e57604051600160e51b62461bcd0281526004016102d89061130a565b3360009081526005602090815260408083208054860190556003805486019055600b909152902054610b8957336000908152600b60205260409020600190819055600c805490910190555b33600081815260056020526040908190205490517f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee909261058b92909186919061128a565b60096020526000908152604090205481565b6001546001600160a01b031681565b600c5481565b610bfc61028a565b6001600160a01b0316336001600160a01b031614610c1957600080fd5b600855565b60408051808201909152606081526000602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610c7757805160ff1916838001178555610ca4565b82800160010185558215610ca4579182015b82811115610ca4578251825591602001919060010190610c89565b50610cb0929150610cb4565b5090565b610cce91905b80821115610cb05760008155600101610cba565b90565b6000610cdd82356113fa565b9392505050565b600082601f830112610cf557600080fd5b8135610d08610d038261139f565b611378565b91508181835260208401935060208101905083856020840282011115610d2d57600080fd5b60005b83811015610d595781610d438882610cd1565b8452506020928301929190910190600101610d30565b5050505092915050565b600082601f830112610d7457600080fd5b8135610d82610d038261139f565b81815260209384019390925082018360005b83811015610d595781358601610daa8882610dcc565b8452506020928301929190910190600101610d94565b6000610cdd8251611405565b600082601f830112610ddd57600080fd5b8135610deb610d03826113c0565b91508082526020830160208301858383011115610e0757600080fd5b610e12838284611427565b50505092915050565b6000610cdd8235610cce565b6000610cdd8251610cce565b600060208284031215610e4557600080fd5b6000610e518484610cd1565b949350505050565b600080600060608486031215610e6e57600080fd5b6000610e7a8686610cd1565b9350506020610e8b86828701610cd1565b9250506040610e9c86828701610e1b565b9150509250925092565b60008060008060808587031215610ebc57600080fd5b6000610ec88787610cd1565b9450506020610ed987828801610cd1565b9350506040610eea87828801610e1b565b9250506060610efb87828801610e1b565b91505092959194509250565b60008060408385031215610f1a57600080fd5b823567ffffffffffffffff811115610f3157600080fd5b610f3d85828601610ce4565b925050602083013567ffffffffffffffff811115610f5a57600080fd5b610f6685828601610d63565b9150509250929050565b600060208284031215610f8257600080fd5b6000610e518484610dc0565b600060208284031215610fa057600080fd5b6000610e518484610e1b565b600060208284031215610fbe57600080fd5b6000610e518484610e27565b610fd381611416565b82525050565b610fd3816113fa565b610fd381611405565b6000610ff6826113e8565b61100081856113ec565b9350611010818560208601611433565b61101981611463565b9093019392505050565b6000611030602e836113ec565b7f5472616e73666572206f6620546f6b656e73204661696c65642c20416c6c6f7781527f616e6365206e6f7420676976656e000000000000000000000000000000000000602082015260400192915050565b600061108f602e836113ec565b7f476976656e20616d6f756e742069732067726561746572207468616e2074686581527f207374616b656420616d6f756e74000000000000000000000000000000000000602082015260400192915050565b60006110ee6011836113ec565b7f5472616e73666572204661696c65642e2e000000000000000000000000000000815260200192915050565b6000611127602a836113ec565b7f4572726f7220696e2020546f6b656e7320416c6c6f636174696f6e205472616e8152600160b21b691cd9995c88195d995b9d02602082015260400192915050565b60006111766032836113ec565b7f54686520636f6e7374727563746f722066756e6374696f6e2068617320616c7281527f65616479206265656e2065786563757465640000000000000000000000000000602082015260400192915050565b60006111d56011836113ec565b7f546f6b656e73206e6f74207374616b6564000000000000000000000000000000815260200192915050565b600061120e6014836113f5565b7f4e564553542e436f6e74726163742e6f776e6572000000000000000000000000815260140192915050565b610fd381610cce565b600061124e82611201565b92915050565b6020810161124e8284610fd9565b606081016112708286610fca565b61127d6020830185610fd9565b610e51604083018461123a565b606081016112988286610fca565b61127d602083018561123a565b606081016112708286610fd9565b604081016112c18285610fd9565b610cdd602083018461123a565b606081016112988286610fd9565b6020810161124e8284610fe2565b604080825281016112fb8185610feb565b9050610cdd6020830184610fd9565b6020808252810161124e81611023565b6020808252810161124e81611082565b6020808252810161124e816110e1565b6020808252810161124e8161111a565b6020808252810161124e81611169565b6020808252810161124e816111c8565b6020810161124e828461123a565b60405181810167ffffffffffffffff8111828210171561139757600080fd5b604052919050565b600067ffffffffffffffff8211156113b657600080fd5b5060209081020190565b600067ffffffffffffffff8211156113d757600080fd5b506020601f91909101601f19160190565b5190565b90815260200190565b919050565b600061124e8261140a565b151590565b6001600160a01b031690565b600061124e82600061124e826113fa565b82818337506000910152565b60005b8381101561144e578181015183820152602001611436565b8381111561145d576000848401525b50505050565b601f01601f19169056fea265627a7a72305820374cef340d0695783fc6dd5a0c55d497f95e401a8a5edac27a4577fd2a46f9c46c6578706572696d656e74616cf50037