61029a60095566038d7ea4c68000600a556005600b55600d805460ff19169055600e60809081526d7665676769652062726f74686b6f60901b60a052610100604052600760c09081526676676762726b6f60c81b60e052600262000064838262000274565b50600362000073828262000274565b5050600160005550620000863362000099565b62000093336001620000eb565b62000340565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000805490829003620001115760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b1783179055828401908390839060008051602062001fac8339815191528180a4600183015b818114620001a0578083600060008051602062001fac833981519152600080a460010162000177565b5081600003620001c257604051622e076360e81b815260040160405180910390fd5b60005550505050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001fb57607f821691505b6020821081036200021c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001cb57600081815260208120601f850160051c810160208610156200024b5750805b601f850160051c820191505b818110156200026c5782815560010162000257565b505050505050565b81516001600160401b03811115620002905762000290620001d0565b620002a881620002a18454620001e6565b8462000222565b602080601f831160018114620002e05760008415620002c75750858301515b600019600386901b1c1916600185901b1785556200026c565b600085815260208120601f198616915b828110156200031157888601518255948401946001909101908401620002f0565b5085821015620003305787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611c5c80620003506000396000f3fe6080604052600436106101d85760003560e01c806370a0823111610102578063c6f6f21611610095578063e985e9c511610064578063e985e9c5146104f1578063ed6661c21461053a578063f2fde38b1461054f578063f968adbe1461056f57600080fd5b8063c6f6f2161461046b578063c87b56dd1461048b578063c94ccfc7146104ab578063d5abeb01146104db57600080fd5b806395d89b41116100d157806395d89b4114610410578063a0712d6814610425578063a22cb46514610438578063b88d4fde1461045857600080fd5b806370a082311461039d578063715018a6146103bd5780638da5cb5b146103d257806391b7f5ed146103f057600080fd5b80632f85423a1161017a5780636352211e116101495780636352211e1461033257806367243482146103525780636817c76c146103725780636c0360eb1461038857600080fd5b80632f85423a146102d55780633ccfd60b146102ea57806342842e0e146102ff57806355f804b31461031257600080fd5b8063095ea7b3116101b6578063095ea7b31461026c57806318160ddd1461028157806319908016146102a857806323b872dd146102c257600080fd5b806301ffc9a7146101dd57806306fdde0314610212578063081812fc14610234575b600080fd5b3480156101e957600080fd5b506101fd6101f836600461155a565b610585565b60405190151581526020015b60405180910390f35b34801561021e57600080fd5b5061022761066a565b60405161020991906115c7565b34801561024057600080fd5b5061025461024f3660046115da565b6106fc565b6040516001600160a01b039091168152602001610209565b61027f61027a36600461160f565b610759565b005b34801561028d57600080fd5b5060015460005403600019015b604051908152602001610209565b3480156102b457600080fd5b50600d546101fd9060ff1681565b61027f6102d0366004611639565b61082a565b3480156102e157600080fd5b5061027f610a41565b3480156102f657600080fd5b5061027f610a5d565b61027f61030d366004611639565b610b05565b34801561031e57600080fd5b5061027f61032d366004611675565b610b25565b34801561033e57600080fd5b5061025461034d3660046115da565b610b3a565b34801561035e57600080fd5b5061027f61036d3660046117bd565b610b45565b34801561037e57600080fd5b5061029a600a5481565b34801561039457600080fd5b50610227610bde565b3480156103a957600080fd5b5061029a6103b836600461187d565b610c6c565b3480156103c957600080fd5b5061027f610cd4565b3480156103de57600080fd5b506008546001600160a01b0316610254565b3480156103fc57600080fd5b5061027f61040b3660046115da565b610ce8565b34801561041c57600080fd5b50610227610cf5565b61027f6104333660046115da565b610d04565b34801561044457600080fd5b5061027f610453366004611898565b610ed9565b61027f6104663660046118d4565b610f45565b34801561047757600080fd5b5061027f6104863660046115da565b610fa2565b34801561049757600080fd5b506102276104a63660046115da565b610faf565b3480156104b757600080fd5b506101fd6104c636600461187d565b600e6020526000908152604090205460ff1681565b3480156104e757600080fd5b5061029a60095481565b3480156104fd57600080fd5b506101fd61050c366004611994565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561054657600080fd5b5061029a606581565b34801561055b57600080fd5b5061027f61056a36600461187d565b611022565b34801561057b57600080fd5b5061029a600b5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061061857507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061066457507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060028054610679906119c7565b80601f01602080910402602001604051908101604052809291908181526020018280546106a5906119c7565b80156106f25780601f106106c7576101008083540402835291602001916106f2565b820191906000526020600020905b8154815290600101906020018083116106d557829003601f168201915b5050505050905090565b6000610707826110af565b61073d576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061076482610b3a565b9050336001600160a01b038216146107b657610780813361050c565b6107b6576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610835826110fd565b9050836001600160a01b0316816001600160a01b031614610882576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b038816909114176108e8576108b2863361050c565b6108e8576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610928576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801561093357600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b177c0200000000000000000000000000000000000000000000000000000000176000858152600460205260408120919091557c0200000000000000000000000000000000000000000000000000000000841690036109f7576001840160008181526004602052604081205490036109f55760005481146109f55760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b610a496111a5565b600d805460ff19811660ff90911615179055565b610a656111a5565b604051600090339047908381818185875af1925050503d8060008114610aa7576040519150601f19603f3d011682016040523d82523d6000602084013e610aac565b606091505b5050905080610b025760405162461bcd60e51b815260206004820152600f60248201527f5472616e73666572206661696c6564000000000000000000000000000000000060448201526064015b60405180910390fd5b50565b610b2083838360405180602001604052806000815250610f45565b505050565b610b2d6111a5565b600c610b20828483611a47565b6000610664826110fd565b610b4d6111a5565b815181518114610b89576040517fe7f1326e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610bd857610bd0848281518110610ba957610ba9611b08565b6020026020010151848381518110610bc357610bc3611b08565b60200260200101516111ff565b600101610b8c565b50505050565b600c8054610beb906119c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c17906119c7565b8015610c645780601f10610c3957610100808354040283529160200191610c64565b820191906000526020600020905b815481529060010190602001808311610c4757829003601f168201915b505050505081565b60006001600160a01b038216610cae576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b610cdc6111a5565b610ce66000611330565b565b610cf06111a5565b600a55565b606060038054610679906119c7565b333214610d3d576040517f875fdad700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d5460ff16610d79576040517f589ed34b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b54811115610db5576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60095481610dc66000546000190190565b011115610dff576040517f2d573a5500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600e602052604090205460ff16158015610e2e57506065610e296000546000190190565b600101105b15610e925760018103600a54023414610e73576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600e60205260409020805460ff19166001179055610ecf565b80600a54023414610ecf576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0233826111ff565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610f5084848461082a565b6001600160a01b0383163b15610bd857610f6c8484848461139a565b610bd8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610faa6111a5565b600b55565b6060610fba826110af565b610ff0576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c610ffb836114e8565b60405160200161100c929190611b1e565b6040516020818303038152906040529050919050565b61102a6111a5565b6001600160a01b0381166110a65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610af9565b610b0281611330565b6000816001111580156110c3575060005482105b80156106645750506000908152600460205260409020547c0100000000000000000000000000000000000000000000000000000000161590565b600081806001116111735760005481101561117357600081815260046020526040812054907c010000000000000000000000000000000000000000000000000000000082169003611171575b8060000361116a575060001901600081815260046020526040902054611149565b9392505050565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6008546001600160a01b03163314610ce65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610af9565b600080549082900361123d576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b8181146112ec57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001016112b4565b5081600003611327576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005550505050565b600880546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081526000906001600160a01b0385169063150b7a02906113e8903390899088908890600401611bcd565b6020604051808303816000875af1925050508015611423575060408051601f3d908101601f1916820190925261142091810190611c09565b60015b61149a573d808015611451576040519150601f19603f3d011682016040523d82523d6000602084013e611456565b606091505b508051600003611492576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050949350505050565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a9004806115025750819003601f19909101908152919050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610b0257600080fd5b60006020828403121561156c57600080fd5b813561116a8161152c565b60005b8381101561159257818101518382015260200161157a565b50506000910152565b600081518084526115b3816020860160208601611577565b601f01601f19169290920160200192915050565b60208152600061116a602083018461159b565b6000602082840312156115ec57600080fd5b5035919050565b80356001600160a01b038116811461160a57600080fd5b919050565b6000806040838503121561162257600080fd5b61162b836115f3565b946020939093013593505050565b60008060006060848603121561164e57600080fd5b611657846115f3565b9250611665602085016115f3565b9150604084013590509250925092565b6000806020838503121561168857600080fd5b823567ffffffffffffffff808211156116a057600080fd5b818501915085601f8301126116b457600080fd5b8135818111156116c357600080fd5b8660208285010111156116d557600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611726576117266116e7565b604052919050565b600067ffffffffffffffff821115611748576117486116e7565b5060051b60200190565b600082601f83011261176357600080fd5b813560206117786117738361172e565b6116fd565b82815260059290921b8401810191818101908684111561179757600080fd5b8286015b848110156117b2578035835291830191830161179b565b509695505050505050565b600080604083850312156117d057600080fd5b823567ffffffffffffffff808211156117e857600080fd5b818501915085601f8301126117fc57600080fd5b8135602061180c6117738361172e565b82815260059290921b8401810191818101908984111561182b57600080fd5b948201945b8386101561185057611841866115f3565b82529482019490820190611830565b9650508601359250508082111561186657600080fd5b5061187385828601611752565b9150509250929050565b60006020828403121561188f57600080fd5b61116a826115f3565b600080604083850312156118ab57600080fd5b6118b4836115f3565b9150602083013580151581146118c957600080fd5b809150509250929050565b600080600080608085870312156118ea57600080fd5b6118f3856115f3565b935060206119028187016115f3565b935060408601359250606086013567ffffffffffffffff8082111561192657600080fd5b818801915088601f83011261193a57600080fd5b81358181111561194c5761194c6116e7565b61195e84601f19601f840116016116fd565b9150808252898482850101111561197457600080fd5b808484018584013760008482840101525080935050505092959194509250565b600080604083850312156119a757600080fd5b6119b0836115f3565b91506119be602084016115f3565b90509250929050565b600181811c908216806119db57607f821691505b6020821081036119fb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610b2057600081815260208120601f850160051c81016020861015611a285750805b601f850160051c820191505b81811015610a3957828155600101611a34565b67ffffffffffffffff831115611a5f57611a5f6116e7565b611a7383611a6d83546119c7565b83611a01565b6000601f841160018114611aa75760008515611a8f5750838201355b600019600387901b1c1916600186901b178355611b01565b600083815260209020601f19861690835b82811015611ad85786850135825560209485019460019092019101611ab8565b5086821015611af55760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b634e487b7160e01b600052603260045260246000fd5b6000808454611b2c816119c7565b60018281168015611b445760018114611b5957611b88565b60ff1984168752821515830287019450611b88565b8860005260208060002060005b85811015611b7f5781548a820152908401908201611b66565b50505082870194505b505050508351611b9c818360208801611577565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000009101908152600501949350505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611bff608083018461159b565b9695505050505050565b600060208284031215611c1b57600080fd5b815161116a8161152c56fea2646970667358221220aaee69cc90240b76eff8b35814bbc2da2379e4082ad7cd6776029b705c47d2b864736f6c63430008140033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef